569 lines
19 KiB
C
569 lines
19 KiB
C
//
|
||
|
||
//
|
||
#include "bmp.h"
|
||
#include "st7789.h"
|
||
unsigned char work[4096] = {0};
|
||
unsigned int count = 0;
|
||
BMP_8 bmp8[][IMG_WIDTH];
|
||
|
||
|
||
void bmp24_to_rgb565(BMP_24 bmp24[][IMG_WIDTH],RGB565 rgb565[][IMG_WIDTH],uint16_t img[][IMG_WIDTH])
|
||
{
|
||
for (int i = 0; i < IMG_HEIGHT; i++) //BMP24->RGB565
|
||
{
|
||
for (int j = 0; j < IMG_WIDTH; j++)
|
||
{
|
||
rgb565[i][j].r_bit =bmp24[i][j].r_val>>3;
|
||
rgb565[i][j].g_bit = bmp24[i][j].g_val>>2;
|
||
rgb565[i][j].b_bit = bmp24[i][j].b_val>>3;
|
||
}
|
||
}
|
||
for (int i = 0; i < IMG_HEIGHT; i++)
|
||
{
|
||
for (int j = 0; j < IMG_WIDTH; j++)
|
||
{
|
||
img[i][j] =(rgb565[i][j].r_bit << 11 |rgb565[i][j].g_bit << 5 |rgb565[i][j].b_bit);
|
||
img[i][j] =( img[i][j] >> 8) | ((img[i][j] & 0xFF) << 8);
|
||
}
|
||
}
|
||
}
|
||
|
||
void bmp8_to_bmp1(BMP_8 bmp8[][IMG_WIDTH],uint8_t img[][IMG_WIDTH/8],uint8_t thre)
|
||
{
|
||
uint8_t after_thre[IMG_HEIGHT*IMG_WIDTH];
|
||
for(int i=0;i<IMG_HEIGHT;i++)
|
||
{
|
||
for(int j=0;j<IMG_WIDTH;j++)
|
||
{
|
||
after_thre[i*IMG_WIDTH+j]=bmp8[i][j].gray_val>=thre;
|
||
}
|
||
}
|
||
for(int i=0;i<IMG_HEIGHT*IMG_WIDTH;i+=8)
|
||
{
|
||
for(int j=0;j<8;j++)
|
||
{
|
||
**img= **img<<1|after_thre[i+j];
|
||
}
|
||
img++;
|
||
}
|
||
}
|
||
|
||
uint8_t temp_to_bmp8(BMP_8 bmp8[],const float temp_mat[],int size,float *max_temp,float *min_temp,uint8_t revese)
|
||
{
|
||
float low_threshold=1000;
|
||
float high_threshold=-1000;
|
||
int max_index=0;
|
||
for(int i=0;i<size;i++)
|
||
{
|
||
if(temp_mat[i]<low_threshold)
|
||
low_threshold=temp_mat[i];
|
||
if(temp_mat[i]>high_threshold)
|
||
high_threshold=temp_mat[i];
|
||
}
|
||
*max_temp=high_threshold;
|
||
*min_temp=low_threshold;
|
||
//温度异常退出重新获取
|
||
if(high_threshold>300||low_threshold<-40)
|
||
return 1;
|
||
uint8_t max_gray=0;
|
||
for(int i=0;i<size;i++)
|
||
{
|
||
if(!revese)
|
||
bmp8[i].gray_val=(int)(temp_mat[i]*255.0f/(high_threshold-low_threshold)+-1*low_threshold*255.0f/(high_threshold-low_threshold));
|
||
else
|
||
bmp8[i].gray_val=(int)(temp_mat[(i / IMG_INITIAL_WIDTH + 1) * IMG_INITIAL_WIDTH - i - 1+ (i / IMG_INITIAL_WIDTH ) * IMG_INITIAL_WIDTH]*255.0f/(high_threshold-low_threshold)+-1*low_threshold*255.0f/(high_threshold-low_threshold));
|
||
if(bmp8[i].gray_val>max_gray)
|
||
{
|
||
max_gray=bmp8[i].gray_val;
|
||
max_index=i;
|
||
}
|
||
}
|
||
max_index/IMG_INITIAL_WIDTH*IMG_HEIGHT+5;
|
||
|
||
int max_y=max_index/IMG_INITIAL_WIDTH*IMG_HEIGHT/IMG_INITIAL_HEIGHT+(240-IMG_HEIGHT)/2+IMG_HEIGHT/IMG_INITIAL_HEIGHT/2;
|
||
int max_x=(max_index%IMG_INITIAL_WIDTH)*IMG_WIDTH/IMG_INITIAL_WIDTH+(320-IMG_WIDTH)/2+IMG_WIDTH/IMG_INITIAL_WIDTH/2;
|
||
BSP_LCD_FillRect(max_x-6,max_y-1,12,2,BLACK);
|
||
BSP_LCD_FillRect(max_x-1,max_y-6,2,12,BLACK);
|
||
//ST7789_DrawFilledRectangle(max_x-6,max_y-1,12,2,BLACK);
|
||
//ST7789_DrawFilledRectangle(max_x-1,max_y-6,2,12,BLACK);
|
||
return 0;
|
||
}
|
||
|
||
//邻近插值法
|
||
void Resize_draw(BMP_8 bmp8[],uint8_t method)
|
||
{
|
||
BMP_24 input_bmp24[IMG_INITIAL_HEIGHT][IMG_INITIAL_WIDTH];
|
||
gray_to_rgb(bmp8,input_bmp24,method);
|
||
RGB565 TEMP_RGB565;
|
||
//SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
|
||
//ST7789_SetAddressWindow((320-IMG_WIDTH)/2, (240-IMG_HEIGHT)/2, IMG_WIDTH+(320-IMG_WIDTH)/2-1, IMG_HEIGHT+(240-IMG_HEIGHT)/2-1);
|
||
SetDisplayWindow((320-IMG_WIDTH)/2, (240-IMG_HEIGHT)/2, IMG_WIDTH+(320-IMG_WIDTH)/2-1, IMG_HEIGHT+(240-IMG_HEIGHT)/2-1);
|
||
ST7789_Select();
|
||
ST7789_DC_Set();
|
||
uint16_t data[IMG_WIDTH*IMG_HEIGHT/4];
|
||
for(int i=0;i<IMG_INITIAL_HEIGHT;i++)
|
||
{
|
||
for(int j=0;j<IMG_INITIAL_WIDTH;j++)
|
||
{
|
||
TEMP_RGB565.r_bit =input_bmp24[i][j].r_val>>3;
|
||
TEMP_RGB565.g_bit =input_bmp24[i][j].g_val>>2;
|
||
TEMP_RGB565.b_bit =input_bmp24[i][j].b_val>>3;
|
||
uint16_t color;
|
||
color =(TEMP_RGB565.r_bit << 11 |TEMP_RGB565.g_bit << 5 |TEMP_RGB565.b_bit);
|
||
color =( color >> 8) | ((color & 0xFF) << 8);
|
||
if(i%6==0)
|
||
{
|
||
for(int a=0;a<IMG_WIDTH/IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
for(int b=0;b<IMG_WIDTH/IMG_INITIAL_WIDTH;b++)
|
||
data[a*IMG_WIDTH+j*IMG_WIDTH/IMG_INITIAL_WIDTH+b]=color;
|
||
}
|
||
}
|
||
else if((i+5)%6==0)
|
||
{
|
||
for(int a=IMG_WIDTH/IMG_INITIAL_WIDTH;a<2*IMG_WIDTH/IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
for(int b=0;b<IMG_WIDTH/IMG_INITIAL_WIDTH;b++)
|
||
data[a*IMG_WIDTH+j*IMG_WIDTH/IMG_INITIAL_WIDTH+b]=color;
|
||
}
|
||
}
|
||
else if((i+4)%6==0)
|
||
{
|
||
for(int a=2*IMG_WIDTH/IMG_INITIAL_WIDTH;a<3*IMG_WIDTH/IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
for(int b=0;b<IMG_WIDTH/IMG_INITIAL_WIDTH;b++)
|
||
data[a*IMG_WIDTH+j*IMG_WIDTH/IMG_INITIAL_WIDTH+b]=color;
|
||
}
|
||
}
|
||
else if((i+3)%6==0)
|
||
{
|
||
for(int a=3*IMG_WIDTH/IMG_INITIAL_WIDTH;a<4*IMG_WIDTH/IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
for(int b=0;b<IMG_WIDTH/IMG_INITIAL_WIDTH;b++)
|
||
data[a*IMG_WIDTH+j*IMG_WIDTH/IMG_INITIAL_WIDTH+b]=color;
|
||
}
|
||
}
|
||
else if((i+2)%6==0)
|
||
{
|
||
for(int a=4*IMG_WIDTH/IMG_INITIAL_WIDTH;a<5*IMG_WIDTH/IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
for(int b=0;b<IMG_WIDTH/IMG_INITIAL_WIDTH;b++)
|
||
data[a*IMG_WIDTH+j*IMG_WIDTH/IMG_INITIAL_WIDTH+b]=color;
|
||
}
|
||
}
|
||
else if((i+1)%6==0)
|
||
{
|
||
for(int a=5*IMG_WIDTH/IMG_INITIAL_WIDTH;a<6*IMG_WIDTH/IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
for(int b=0;b<IMG_WIDTH/IMG_INITIAL_WIDTH;b++)
|
||
data[a*IMG_WIDTH+j*IMG_WIDTH/IMG_INITIAL_WIDTH+b]=color;
|
||
}
|
||
}
|
||
}
|
||
if(!((i+1)%6))
|
||
{
|
||
HAL_SPI_Transmit(hspi, (uint8_t *)data, sizeof(uint16_t) * IMG_WIDTH*IMG_HEIGHT/4, HAL_MAX_DELAY);
|
||
}
|
||
}
|
||
|
||
ST7789_UnSelect();
|
||
}
|
||
// 双线性插值
|
||
uint8_t Besize_draw(BMP_8 input_bmp8[],uint8_t method,uint8_t ifsavefile)
|
||
{//注释的是自己的插值,现在使用dsp库中提供的
|
||
// BMP_8 bmp8[IMG_INITIAL_HEIGHT][IMG_INITIAL_WIDTH];
|
||
BMP_8 temp;
|
||
BMP_24 temp_24;
|
||
RGB565 TEMP_RGB565;
|
||
uint16_t color[1];
|
||
char filename[20];
|
||
int i, j;
|
||
int w = IMG_INITIAL_WIDTH;
|
||
int h = IMG_INITIAL_HEIGHT;
|
||
int iw = IMG_WIDTH;
|
||
int ih = IMG_HEIGHT;
|
||
float dx=((float)IMG_INITIAL_WIDTH-2.0f)*1.0f/(IMG_WIDTH-1);
|
||
float dy=((float)IMG_INITIAL_HEIGHT-2.0f)*1.0f/(IMG_HEIGHT-1);
|
||
// for(int a=0;a<IMG_INITIAL_HEIGHT;a++)
|
||
// {
|
||
// for(int b=0;b<IMG_INITIAL_WIDTH;b++)
|
||
// bmp8[a][b].gray_val=input_bmp8[a*IMG_INITIAL_WIDTH+b].gray_val;
|
||
// }
|
||
arm_bilinear_interp_instance_f32 bilinear_data;
|
||
bilinear_data.numCols=IMG_INITIAL_WIDTH;
|
||
bilinear_data.numRows=IMG_INITIAL_HEIGHT;
|
||
float data[IMG_INITIAL_WIDTH*IMG_INITIAL_HEIGHT];
|
||
for(int a=0;a<IMG_INITIAL_HEIGHT*IMG_INITIAL_WIDTH;a++)
|
||
{
|
||
data[a]=(float)input_bmp8[a].gray_val;
|
||
}
|
||
bilinear_data.pData=data;
|
||
|
||
//ST7789_SetAddressWindow((320-IMG_WIDTH)/2, (240-IMG_HEIGHT)/2, IMG_WIDTH+(320-IMG_WIDTH)/2-1, IMG_HEIGHT+(240-IMG_HEIGHT)/2-1);
|
||
SetDisplayWindow((320-IMG_WIDTH)/2, (240-IMG_HEIGHT)/2, IMG_WIDTH+(320-IMG_WIDTH)/2-1, IMG_HEIGHT+(240-IMG_HEIGHT)/2-1);
|
||
ST7789_Select();
|
||
ST7789_DC_Set();
|
||
uint16_t imgdata[IMG_WIDTH*IMG_HEIGHT/4];
|
||
uint32_t index=0;
|
||
for (j = 0; j < ih; j++)
|
||
{
|
||
// float fy = ((float)j + 0.5f) * dy - 0.5f;
|
||
float fy=(float)j * dy+1 ;
|
||
for (i = 0; i < iw; i++)
|
||
{
|
||
// float fx = ((float)i + 0.5f) * dx - 0.5f;
|
||
float fx = (float)i * dx+1 ;
|
||
temp.gray_val=(uint8_t)arm_bilinear_interp_f32(&bilinear_data,fx,fy);
|
||
// // 四邻域
|
||
// int Lx = (int)fx;
|
||
// int Rx = Lx + 1;
|
||
// int Ly = (int)fy;
|
||
// int Ry = Ly + 1;
|
||
// Lx = Lx > w - 2 ? w - 2 : Lx < 0 ? 0 : Lx;
|
||
// Rx = Rx > w - 1 ? w - 1 : Rx < 0 ? 0 : Rx;
|
||
// Ly = Ly > h - 2 ? h - 2 : Ly < 0 ? 0 : Ly;
|
||
// Ry = Ry > h - 1 ? h - 1 : Ry < 0 ? 0 : Ry;
|
||
// float u = (float)Rx - fx;
|
||
// float v = (float)Ry - fy;
|
||
// float r1=u*(float)bmp8[Ly][Lx].gray_val+(1-u)*(float)bmp8[Ly][Rx].gray_val;
|
||
// float r2=u*(float)bmp8[Ry][Lx].gray_val+(1-u)*(float)bmp8[Ry][Rx].gray_val;
|
||
// temp.gray_val=(uint8_t)(v * r1 + (1 - v) * r2);
|
||
bmp8_to_color(method,temp.gray_val,&temp_24);
|
||
TEMP_RGB565.r_bit =temp_24.r_val>>3;
|
||
TEMP_RGB565.g_bit =temp_24.g_val>>2;
|
||
TEMP_RGB565.b_bit =temp_24.b_val>>3;
|
||
color[0] =(TEMP_RGB565.r_bit << 11 |TEMP_RGB565.g_bit << 5 |TEMP_RGB565.b_bit);
|
||
color[0] =( color[0] >> 8) | ((color[0] & 0xFF) << 8);
|
||
if(index<IMG_WIDTH*(IMG_HEIGHT/4))
|
||
imgdata[index++]=color[0];
|
||
else
|
||
{
|
||
index=0;
|
||
imgdata[index++]=color[0];
|
||
}
|
||
}
|
||
if((j+1)%(IMG_HEIGHT/4)==0)
|
||
{
|
||
HAL_SPI_Transmit(hspi, (uint8_t*)imgdata, sizeof(uint16_t)*IMG_WIDTH*(IMG_HEIGHT/4), HAL_MAX_DELAY);
|
||
}
|
||
}
|
||
ST7789_UnSelect();
|
||
return 0;
|
||
}
|
||
|
||
|
||
void gray_to_rgb(BMP_8 bmp8[],BMP_24 bmp24[][IMG_INITIAL_WIDTH],uint8_t method)
|
||
{
|
||
for(int i=0;i<IMG_INITIAL_HEIGHT;i++)
|
||
{
|
||
for(int j=0;j<IMG_INITIAL_WIDTH;j++)
|
||
{
|
||
bmp8_to_color(method,bmp8[i*IMG_INITIAL_WIDTH+j].gray_val,&bmp24[i][j]);
|
||
}
|
||
}
|
||
}
|
||
|
||
void bmp8_to_color(uint8_t method,uint8_t gray_val,BMP_24*bmp24)
|
||
{
|
||
switch(method)
|
||
{
|
||
case GCM_Pseudo1:
|
||
bmp24->r_val=abs(0-gray_val);
|
||
bmp24->g_val=abs(127-gray_val);
|
||
bmp24->b_val=abs(255-gray_val);
|
||
break;
|
||
|
||
case GCM_Pseudo2:
|
||
if( (gray_val>=0) && (gray_val<=63) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=0;
|
||
bmp24->b_val=(gray_val*255/64);
|
||
}
|
||
else if( (gray_val>=64) && (gray_val<=127) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=((gray_val-64)*255/64);
|
||
bmp24->b_val=((127-gray_val)*255/64);
|
||
}
|
||
else if( (gray_val>=128) && (gray_val<=191) )
|
||
{
|
||
bmp24->r_val=((gray_val-128)*255/64);
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=192) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=((255-gray_val)*255/64);
|
||
bmp24->b_val=0;
|
||
}
|
||
break;
|
||
|
||
case GCM_Metal1:
|
||
if( (gray_val>=0) && (gray_val<=63) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=0;
|
||
bmp24->b_val=(gray_val*255/64);
|
||
}
|
||
else if( (gray_val>=64) && (gray_val<=95) )
|
||
{
|
||
bmp24->r_val=((gray_val-63)*127/32);
|
||
bmp24->g_val=((gray_val-63)*127/32);
|
||
bmp24->b_val=255;
|
||
}
|
||
else if( (gray_val>=96) && (gray_val<=127) )
|
||
{
|
||
bmp24->r_val=((gray_val-95)*127/32)+128;
|
||
bmp24->g_val=((gray_val-95)*127/32)+128;
|
||
bmp24->b_val=((127-gray_val)*255/32);
|
||
}
|
||
else if( (gray_val>=128) && (gray_val<=191) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=192) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=((gray_val-192)*255/64);
|
||
}
|
||
break;
|
||
|
||
case GCM_Metal2:
|
||
bmp24->r_val=0; bmp24->b_val=0; bmp24->b_val=0;
|
||
if( (gray_val>=0) && (gray_val<=16) )
|
||
{
|
||
bmp24->r_val=0;
|
||
}
|
||
else if( (gray_val>=17) && (gray_val<=140) )
|
||
{
|
||
bmp24->r_val=((gray_val-16)*255/(140-16));
|
||
}
|
||
else if( (gray_val>=141) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
}
|
||
|
||
if( (gray_val>=0) && (gray_val<=101) )
|
||
{
|
||
bmp24->g_val=0;
|
||
}
|
||
else if( (gray_val>=102) && (gray_val<=218) )
|
||
{
|
||
bmp24->g_val=((gray_val-101)*255/(218-101));
|
||
}
|
||
else if( (gray_val>=219) && (gray_val<=255) )
|
||
{
|
||
bmp24->g_val=255;
|
||
}
|
||
|
||
if( (gray_val>=0) && (gray_val<=91) )
|
||
{
|
||
bmp24->b_val=28+((gray_val-0)*100/(91-0));
|
||
}
|
||
else if( (gray_val>=92) && (gray_val<=120) )
|
||
{
|
||
bmp24->b_val=((120-gray_val)*128/(120-91));
|
||
}
|
||
else if( (gray_val>=129) && (gray_val<=214) )
|
||
{
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=215) && (gray_val<=255) )
|
||
{
|
||
bmp24->b_val=((gray_val-214)*255/(255-214));
|
||
}
|
||
break;
|
||
|
||
case GCM_Rainbow1:
|
||
if( (gray_val>=0) && (gray_val<=31) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=0;
|
||
bmp24->b_val=(gray_val*255/32);
|
||
}
|
||
else if( (gray_val>=32) && (gray_val<=63) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=((gray_val-32)*255/32);
|
||
bmp24->b_val=255;
|
||
}
|
||
else if( (gray_val>=64) && (gray_val<=95) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=((95-gray_val)*255/32);
|
||
}
|
||
else if( (gray_val>=96) && (gray_val<=127) )
|
||
{
|
||
bmp24->r_val=((gray_val-96)*255/32);
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=128) && (gray_val<=191) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=((191-gray_val)*255/64);
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=192) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=((gray_val-192)*255/64);//0
|
||
bmp24->b_val=((gray_val-192)*255/64);
|
||
}
|
||
break;
|
||
|
||
case GCM_Rainbow2:
|
||
if( (gray_val>=0) && (gray_val<=63) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=((gray_val-0)*255/64);
|
||
bmp24->b_val=255;
|
||
}
|
||
else if( (gray_val>=64) && (gray_val<=95) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=((95-gray_val)*255/32);
|
||
}
|
||
else if( (gray_val>=96) && (gray_val<=127) )
|
||
{
|
||
bmp24->r_val=((gray_val-96)*255/32);
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=128) && (gray_val<=191) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=((191-gray_val)*255/64);
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=192) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=((gray_val-192)*255/64);
|
||
bmp24->b_val=((gray_val-192)*255/64);
|
||
}
|
||
break;
|
||
|
||
case GCM_Rainbow3:
|
||
if( (gray_val>=0) && (gray_val<=51) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=gray_val*5;
|
||
bmp24->b_val=255;
|
||
}
|
||
else if( (gray_val>=52) && (gray_val<=102) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=255-(gray_val-51)*5;
|
||
}
|
||
else if( (gray_val>=103) && (gray_val<=153) )
|
||
{
|
||
bmp24->r_val=(gray_val-102)*5;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=154) && (gray_val<=204) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=(255-128*(gray_val-153)/51);
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=205) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=(127-127*(gray_val-204)/51);
|
||
bmp24->b_val=0;
|
||
}
|
||
break;
|
||
|
||
case GCM_Zhou:
|
||
if( (gray_val>=0) && (gray_val<=63) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=((64-gray_val)*255/64);
|
||
bmp24->b_val=255;
|
||
}
|
||
else if( (gray_val>=64) && (gray_val<=127) )
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=((gray_val-64)*255/64);
|
||
bmp24->b_val=((127-gray_val)*255/64);
|
||
}
|
||
else if( (gray_val>=128) && (gray_val<=191) )
|
||
{
|
||
bmp24->r_val=((gray_val-128)*255/64);
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if( (gray_val>=192) && (gray_val<=255) )
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=((255-gray_val)*255/64);
|
||
bmp24->b_val=0;
|
||
}
|
||
break;
|
||
|
||
case GCM_Ning:
|
||
if ((gray_val>=0) && (gray_val<=63))
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=254-4*gray_val;
|
||
bmp24->b_val=255;
|
||
}
|
||
else if ((gray_val>=64) && (gray_val<=127))
|
||
{
|
||
bmp24->r_val=0;
|
||
bmp24->g_val=4*gray_val-254;
|
||
bmp24->b_val=510-4*gray_val;
|
||
}
|
||
else if ((gray_val>=128) && (gray_val<=191))
|
||
{
|
||
bmp24->r_val=4*gray_val-510;
|
||
bmp24->g_val=255;
|
||
bmp24->b_val=0;
|
||
}
|
||
else if ((gray_val>=192) && (gray_val<=255))
|
||
{
|
||
bmp24->r_val=255;
|
||
bmp24->g_val=1022-4*gray_val;
|
||
bmp24->b_val=0;
|
||
}
|
||
break;
|
||
|
||
case GCM_Gray:
|
||
bmp24->r_val=gray_val;
|
||
bmp24->g_val=gray_val;
|
||
bmp24->b_val=gray_val;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void draw_spectrum(uint8_t method)
|
||
{
|
||
uint16_t color;
|
||
for(int i=255;i>0;i-=2)
|
||
{
|
||
BMP_24 temp24;
|
||
RGB565 temp565;
|
||
bmp8_to_color(method,i,&temp24);
|
||
temp565.r_bit =temp24.r_val>>3;
|
||
temp565.g_bit =temp24.g_val>>2;
|
||
temp565.b_bit =temp24.b_val>>3;
|
||
color =(temp565.r_bit << 11 |temp565.g_bit << 5 |temp565.b_bit);
|
||
ST7789_DrawFilledRectangle(310,228-((int)((i/2)*1.6875))-2,8,2,color);
|
||
|
||
}
|
||
}
|