void lcd_draw_pic(char *bmpname,int x,int y) //图片名字,横坐标,纵坐标
{
unsigned char buf[4];
int fd = open(bmpname,O_RDONLY);
if(fd == -1)
{
perror("open failed");
return ;
}
//读魔数
lseek(fd,0,SEEK_SET);
read(fd,buf,2);
if(buf[0]!=0x42||buf[1]!=0x4D)
{
printf("this picture is not bmp!\n");
return ;
}
//读位图宽度
int bmp_w = 0;
lseek(fd,0x12,SEEK_SET);
read(fd,&bmp_w,4);
//读位图高度
int bmp_h = 0;
lseek(fd,0x16,SEEK_SET);
read(fd,&bmp_h,4);
//读色深
int bmp_colordepth = 0;
lseek(fd,0x1C,SEEK_SET);
read(fd,&bmp_colordepth,2);
printf("bmp:%ld*%ld*%ld\n",bmp_w,bmp_h,bmp_colordepth);
//读像素数组的内容,并通过画点函数画出
lseek(fd,54,SEEK_SET);
int i,j;
for(i=0;i<bmp_h;i++)
{
for(j=0;j<bmp_w;j++)
{
int color = 0;
read(fd,&color,bmp_colordepth/8);
//位图高度位正数时,会上下颠倒存放数据
lcd_draw_point(x+j,y+(bmp_h>0?(bmp_h-1-i):i),color);
}
lseek(fd,(4-bmp_colordepth/8*bmp_w%4)%4,SEEK_CUR);//跳过无用数据
}
close(fd);
}
在LCD屏指定位置映射.bmp格式图片
最新推荐文章于 2022-09-21 19:39:39 发布
该代码段展示了如何从文件中读取BMP格式的图片,包括检查魔数、解析图片宽高、颜色深度等信息,并通过lcd_draw_point函数将图片像素逐个绘制到LCD上。注意,当位图高度为正时,数据会上下颠倒存放并进行修正。
摘要由CSDN通过智能技术生成