《使用第三方库来显示jpeg图片》

《使用第三方库来显示jpeg图片》
----------------------------------------------------------------------------------------------------------------
           基于itop4412开发板 7寸屏 ubuntu14.4


----------------------------------------------------------------------------------------------------------------
一、文件


  LCD  --->  /dev/fb0


  任务: jpeg  --->  LCD 


  常见图片格式:jpg/png/bmp/gif


  第三方源码库:jpegsrc.v9a.tar.gz    ----> jpeg库: libjpeg.so  (有很多接口文件)
二、实践步骤


1、把第三方库放置到共享目录中,我的路径:/mnt/hgfs/share/jpeg/


2、在linux中


   cd root/experiment/jpeg/


   cp /mnt/hgfs/share/jpeg/jpegsrc.v9a.tar.gz ./


3、解压jpeg库到linux中的某个文件夹中
(1)我的路径是/root/experiment/jpeg/ 
(2)tar zxvf jpegsrc.v9a.tar.gz 


tar:解压或者压缩的命令


z:解压以.gz结尾的压缩包
x:解压的意思  c:压缩的意思
v:以可见的方式来进行解压
f:不可忽略文件


4、创建安装目录,并修改权限
  
   mkdir /root/experiment/jpeg/jpeg
   chmod 777 /root/experiment/jpeg/jpeg/


5、回到jpeg库顶层目录


   cd /root/experiment/jpeg/jpeg-9a/


6、配置当前环境,看看是否允许安装该库


   ./configure --host=arm-linux --prefix=/root/experiment/jpeg/jpeg


   ./configure :执行库的配置文件
   --host=arm-linux:指定编译的的工具链前缀
   --prefix=/root/experiment/jpeg/jpeg :指定安装路径
   检查以下的这句话是否为yes
   checking whether we are cross compiling... yes


7、编译


   make clean   -->清除链接文件
   make


8、安装(把提取出的文件放在/root/experiment/jpeg/jpeg/)


   make install


9、检查是否安装成功


   cd /root/experiment/jpeg/jpeg
   ls
   
    看到的文件夹如下:
bin:二进制文件  
include :头文件
lib  :库文件
share :帮助目录   --->安装成功


10、把libjpeg.so.9.1.0拷贝到共享目录


  cp /root/experiment/jpeg/jpeg/lib/libjpeg.so.9.1.0 /mnt/hgfs/share/jpeg/




11、重命名共享目录中的libjpeg.so.9.1.0为libjpeg.so.9
原因->lib:库的前缀
     jpeg:库的名字
     so:库的后缀
     9:版本号
     1.0:修正号(没用)
 
12、编译jpeg_show.c


    cd /mnt/hgfs/share/jpeg/


    arm-linux-gcc jpeg_show.c -o jpeg_show -I /root/experiment/jpeg/jpeg/include/ -L /root/experiment/jpeg/jpeg/lib/ -ljpeg
注释:  -I /root/experiment/jpeg/jpeg/include/:指定头文件路径
-L /root/experiment/jpeg/jpeg/lib/:指定库文件路径
-ljpeg:链接到库文件


13、把相关的文件下载开发板中
 (1)需要下载的文件:libjpeg.so.9   jpeg_show   xxx.jpg


 (2)第一种下载方法:使用rz工具下载(itop4412的QT不支持,需要自己移植,方法看最后面)
   在SecureCRT中输入命令:rz -y
   


 (3)利用内存卡
   1)查看板子有没有识别sd卡:fdisk -l
   2)挂载sd卡:mount /dev/mmcblk1p1 /mnt/disk
   3)完成复制后卸载sd卡:umount /mnt/disk




14、把libjpeg.so.9拷贝到根目录下得lib目录


    cp libjpeg.so.9 /lib/


15、修改权限


    chmod 777 jpeg_show


16、执行


    ./jpeg_show xxx.jpg


xxx.jpg:代表要显示的图片的名字,例如
./jpeg_show 6.jpg


17、修改jpeg_show.c后重新编译下载

(1)我想刷的是一张横屏的1280*800的图片,发现出现的图片和我所想的不一样,那是因为我们的屏幕是垂直像素分布的,默认是竖屏的。


(2)找到以下的函数,改成下面的样子
void write_lcd(unsigned char *bmp_buffer,
struct image_info *imageinfo,
char *FB, struct fb_var_screeninfo *vinfo)
{
bzero(FB, vinfo->xres * vinfo->yres * 4);


int x, y;


for(x=0; x<vinfo->yres && x<imageinfo->width; x++)
{
for(y=0; y<vinfo->xres && y<imageinfo->height; y++)
{
unsigned long lcd_offset = (vinfo->xres*x + y) * 4;
unsigned long bmp_offset = ( (imageinfo->height - 1 - y)*imageinfo->width+x) *
   imageinfo->pixel_size;


memcpy(FB + lcd_offset + vinfo->red.offset/8,
      bmp_buffer + bmp_offset + 0, 1);
memcpy(FB + lcd_offset + vinfo->green.offset/8,
      bmp_buffer + bmp_offset + 1, 1);
memcpy(FB + lcd_offset + vinfo->blue.offset/8,
      bmp_buffer + bmp_offset + 2, 1);
}
}
}




--------------------------------------------------------------------------------
关于串口传输工具rzsz,只需把编译好的rz、sz两个文件放到板子的/usr/bin 目录下即可。
相关的资料可以留言问我要。




2018/06/04
DGY(编)










 


   







猜你喜欢

转载自blog.csdn.net/DGY1223/article/details/80574546
今日推荐