背景: 显示屏尺寸800 * 480; 图片尺寸300 * 200,类型为bmp 初始坐标值(0,0); 显示原理:利用for循环计算出放大倍数所需扫描大小,if条件判断是否超出屏幕,根据算法原理,假设放大后数组为a,原图数组为b,一行为7个,放大倍数为1.2倍,那么一行会包含7*1.2=8.4,取8即可,a[0]=b[0],a[1]=b[0],用下标/倍数来计算放大后颜色值,为原图哪个坐标值。 核心代码:
double n=2.3;
for(int i=0;ilcd_fd == -1)
{
fprintf(stderr,"打开设备文件失败");
exit(EXIT_FAILURE);
}
p->addr = mmap(NULL , LCD_SIZE , PROT_READ | PROT_WRITE ,
MAP_SHARED,p->lcd_fd , 0 );
if(p->addr == MAP_FAILED)
{
printf("map failed!\n");
return ;
}
}
void lcd_uninit(LCD_DEV *lcd_p)
{
munmap(lcd_p->addr, 800*480*4);
close(lcd_p->lcd_fd);
}
void show(int x, int y, int bmp_w, int bmp_h, const char *bmpname, LCD_DEV *lcd_p)
{
FILE *fp = fopen(bmpname,"r");
fseek(fp,54,SEEK_SET);
unsigned char buf1[bmp_h*bmp_w*3];//buf1为图片缓冲数组
unsigned int buf2[bmp_h*bmp_w];//buf2为转换后数组
fread(buf1,3,bmp_h*bmp_w,fp);
for(int i=0;i |