使用Image2Lcd生成十六进制数组,STM32 LCD图片显示程序

2019-07-20 02:35发布

image.png
正点原子MCU屏使用为16位真彩 {MOD}显示,image2lcd软件可生成相应数组(数组太大了)
图像数据头如下:
const unsigned char gImage_code[153608] = { 0X10,0X10,0X00,0XF0,0X01,0X40,0X01,0X1B,  ......  }  (前八个是图片数组信息,后面的是数据)
定义为:
typedef struct _HEADCOLOR
{
   unsigned char scan;
   unsigned char gray;
   unsigned short w;
   unsigned short h;
   unsigned char is565;
   unsigned char rgb;
}HEADCOLOR;
scan: 扫描模式
  • Bit7: 0:自左至右扫描,1:自右至左扫描。
  • Bit6: 0:自顶至底扫描,1:自底至顶扫描。
  • Bit5: 0:字节内象素数据从高位到低位排列,1:字节内象素数据从低位到高位排列。
  • Bit4: 0:WORD类型高低位字节顺序与PC相同,1:WORD类型高低位字节顺序与PC相反。
  • Bit3~2: 保留。
  • Bit1~0: [00]水平扫描,[01]垂直扫描,[10]数据水平,字节垂直,[11]数据垂直,字节水平。
gray: 灰度值
   灰度值,1:单 {MOD},2:四灰,4:十六灰,8:256 {MOD},12:4096 {MOD},16:16位彩 {MOD},24:24位彩 {MOD},32:32位彩 {MOD}。

w: 图像的宽度。

h: 图像的高度。
is565: 在4096 {MOD}模式下为0表示使用[16bits(WORD)]格式,此时图像数据中每个WORD表示一个象素;为1表示使用[12bits(连续字节流)]格式,此时连续排列的每12Bits代表一个象素。
在16位彩 {MOD}模式下为0表示R G B颜 {MOD}分量所占用的位数都为5Bits,为1表示R G B颜 {MOD}分量所占用的位数分别为5Bits,6Bits,5Bits。
在18位彩 {MOD}模式下为0表示"6Bits in Low Byte",为1表示"6Bits in High Byte"。
在24位彩 {MOD}和32位彩 {MOD}模式下is565无效。

rgb: 描述R G B颜 {MOD}分量的排列顺序,rgb中每2Bits表示一种颜 {MOD}分量,[00]表示空白,[01]表示Red,[10]表示Green,[11]表示Blue。

显示程序:
//图像显示函数,适用Image2Lcd V2.9 图像编译软件  By:gaofei               
void Picture_Draw(u16 S_x,u16 S_y,const unsigned char *pic)
{
        u32 i=8,len;
        u16 temp,x,y,D_x=0,D_y=0;
       
        x=(uint16_t)((pic[2]<<8)+pic[3])-1;       //获取图片的宽度
        y=(uint16_t)((pic[4]<<8)+pic[5])-1;       //获取图片的高度
       
        len=2*x*y;        //获取图片像素点数
       
        while(i<(len+8))      //显示所有像素点
        {
                temp=(uint16_t)((pic<<8)+pic[i+1]);      //image2lcd生成的是8位数组,十六位真彩 {MOD}图像生成为高8位和低8位,这儿将其转换成16位数据,
                if(D_x>x) {D_x=0;D_y++;}         //逐行显示
                LCD_Fast_DrawPoint(S_x+D_x,S_y+D_y,temp);    //画点,拼凑图像,调用正点原子快速画点函数
                D_x++;
                i=i+2;
        }
       
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。