正点原子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;
}
}
F767上的,407没试过
一周热门 更多>