// // #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=thre; } } for(int i=0;ihigh_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;imax_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>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 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(indexr_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); } }