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

  • Post author:
  • Post category:其他


《使用第三方库来显示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(编)



版权声明:本文为dgy1223原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。