基于jz2440开发板编写应用程序,实现对BMP图片的读取并显示在4.3寸的LCD显示屏。其中该程序需要依赖于相关图片库:libSDL.so、libSDL-1.2.so.0、libSDL-1.2.so.0.11.4
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <sys/mman.h>
int lcd;
int init_lcd()
{
lcd = open("/dev/fb0",O_RDWR); //1.打开LCD设备
if(lcd == -1)
{
perror("open LCD Err");
return -1;
}
printf("Picture Loading......\n");
}
int uninit_lcd()
{
close(lcd); //关闭LCD
}
int show_bmp(char *file) //显示一张图片 思路
{
int ret,x,y,i;
short lcdbuf[480*272*2]; //注意:因为此LCD是一个像素包含两个字节,所以要用short,用int类型则会出错
char temp[3] = {0};
char bmpbuf[480*272*3];
int bmp = open(file,O_RDONLY); //2.打开bmp图片
if(bmp == -1)
{
perror("open BMP Err");
return -1;
}
lseek(bmp, 54, SEEK_SET); //偏移54个字节
ret = read(bmp,bmpbuf,480*272*3); //3.读取bmp信息
if(ret ==-1)
{
perror("read BMP Err");
return -1;
}
for(y=0,i=0;y<272;y++)
{
for(x=0;x<480;x++,i+=3)
{
// B G R
lcdbuf[(271-y)*480+x] = (bmpbuf[i])>>3 | (bmpbuf[i+1]>>2)<<5 | (bmpbuf[i+2]>>3) <<11;//将24位转化为16位算法
}
}
//5.往LCD写数据
ret = write(lcd,lcdbuf,480*272*2);
if(ret ==-1)
{
perror("write LCD Err");
return -1;
}
close(bmp); //7.关闭图片
return 0;
}
int main(int argc, char* argv[])
{
init_lcd(); //LCD 初始化
show_bmp(argv[1]);
sleep(1);
uninit_lcd();//关闭LCD
return 0;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/117057.html