《使用第三方库来显示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后重新编译下载
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(编)
----------------------------------------------------------------------------------------------------------------
基于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的图片,发现出现的图片和我所想的不一样,那是因为我们的屏幕是垂直像素分布的,默认是竖屏的。
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(编)