linux---libjpeg使用(jpg to rgb)

一:libjpeg库的编译

下载源码,解压后

./configure   --prefix=/xxxx     CC=arm-linux-gcc -    -host=arm-linux    --enable-shared     --enable-static

---xxxx为生成动静态裤的目录

----CC为交叉编译器

-----enable-shared    ---enable-static 使能动静态库


然后make,

再make install,在xxx目录下生成相应的头文件和库

jconfig.h     jerror.h      jmorecfg.h       jpeglib.h          和   libjpeg.9.so.1.0     libjpeg.a


程序编写

例子为framebuffer  jpg图片格式转rgb(565)

test.c

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdio.h>

#include <sys/mman.h>

#include <linux/fb.h>

#include <stdlib.h>

/////////////////头文件

#include "libinclude/jpeglib.h"

#include "libinclude/jerror.h"

struct fb_var_screeninfo var;

unsigned short *fbp;

//////////////定义结构体

struct jpeg_decompress_struct cinfo;

struct jpeg_error_mgr jerr;

FILE * infile;

int main(int argc ,char **argv)

{

int fd,screen_size,i,j;

unsigned short value;

int pos;

char *rdata;

char *Tbmp[]={"bmp/T1.jpg","bmp/T2.jpg","bmp/T3.jpg","bmp/T4.jpg",

"bmp/T5.jpg","bmp/T6.jpg","bmp/T7.jpg","bmp/T8.jpg","bmp/T9.jpg",

"bmp/T10.jpg","bmp/T11.jpg"};

char  Tpos = 0;

fd = open("/dev/fb0",O_RDWR);

if(fd<0)

perror(" open ");

ioctl(fd,FBIOGET_VSCREENINFO,&var);

printf("var x = %d , y = %d  bits = %d ..\n",var.xres ,var.yres,var.bits_per_pixel);

screen_size = var.xres *var.yres*var.bits_per_pixel/8;

printf("screen_size is %d\n",screen_size);

fbp =  (unsigned short *)mmap(0, screen_size, PROT_WRITE | PROT_READ,  MAP_SHARED ,  fd, 0);

if(!fbp)

goto  mmap_err;

////////////////////////////产生相应变量

cinfo.err = jpeg_std_error(&jerr);

jpeg_create_decompress(&cinfo);

while(1)

{

///////////////////打开图片文件

if ((infile = fopen(Tbmp[Tpos], "rb")) == NULL) {

fprintf(stderr, "can‘t open %s\n", "tu.jpg");

exit(1);

}

Tpos ++;

if(Tpos>=11)

Tpos = 0;

/////////////////获取头信息

jpeg_stdio_src=\‘#\‘" infile);

jpeg_read_header(&cinfo, TRUE);

////////////////分配内存存储字节

rdata=(char*)calloc(cinfo.image_width*cinfo.image_height*cinfo.num_components,1);

////////////////开始解压

jpeg_start_decompress(&cinfo);

JSAMPROW row_pointer[1];

while (cinfo.output_scanline < cinfo.output_height)

{

row_pointer[0] = & rdata[(cinfo.output_scanline)*cinfo.image_width*cinfo.num_components];

jpeg_read_scanlines(&cinfo,row_pointer ,1);

}

/////////////结束解压

jpeg_finish_decompress(&cinfo);

///////////////framebuffer填充刚才分配的字节

pos = 0;

for(i=0;i<var.yres;i++)

for(j=0;j<var.xres;j++)

{

////////////rgb888  转 rgb565

value=  ((rdata[pos]>>3)<<11) |((rdata[pos+1]>>2)<<5) |(rdata[pos+2]>>3);

*(fbp+i*var.xres+j) = value;

pos +=3;

}

sleep(3);

fclose(infile);

}

jpeg_destroy_decompress(&cinfo);

munmap(fbp, screen_size);

close(fd);

return 0;

mmap_err:

perror("mmap\n");

return -1;

}


注:jpg默认解压为rgb888

用过动态库和静态库使用

静态库

此时test.c 目录下有 test.c   libjpeg.a

jconfig.h     jerror.h      jmorecfg.h       jpeglib.h    

arm-linux-gcc  test.c  -o test   -L./  -ljpeg

生成test放到开发板执行

动态库

此时test.c 目录下有test.c

jconfig.h     jerror.h      jmorecfg.h       jpeglib.h    libjpeg.9.so.1.0  


arm-linux-gcc   test.c -o test   -L./   -l:libjpeg.9.so.1.0


把libjpeg.9.so.1.0改为libjpeg.9.so  放到开发板  /usr/lib 目录下

生成test放到开发板执行

时间: 2024-11-29 12:32:54

linux---libjpeg使用(jpg to rgb)的相关文章

乐学成语项目的实现

首先给软件取名为HappyIdiom,在开始编码之前,需要先对程序进行需求分析,想一想HappyIdiom中应该具备哪些功能.将这些功能全部整理出来之后,我们才好动手一一实现.这里我认为HappyIdiom中至少应该具备以下功能: 1.成语分类学习:你可以根据自己喜欢的分类(动物类.人物类.季节类.自然类.数字类.语言类.其他类)来进行学习. 2.乐猜成语:学习之余玩玩猜成语游戏,寓教于乐. 3.成语收藏:当用户遇到自己想要保存的成语,点击保存按钮,即保存到收藏页面以方便用户再次查看,对已经掌握

Linux下安装过程中编译PHP时报错:configure: error: libjpeg.(a|so) not found

在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决的方法: 检查之后发现已经安装libjpeg.可是/usr/lib文件夹下没有libjpeg.so这个文件,在/usr/lib64下是有的,使用–with-jpeg-dir=/usr/lib64 依旧无效, 最后用ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so问题解决 libpng报错解决方法一样

linux x64下编译libjpeg

libJpeg编译: 下载libjpeg源码:http://www.ijg.org/,下载jpegsrc.v9a.tar.gz 解压源码,命令:tar -zxvf jpegsrc.v9a,源码文件夹为jpeg-9a 运行命令:./configure --prefix=jpeg-9a/release --enable-shared=no 在jpeg-9a下查找Makefile文件并打开,查找CFLAGS,在CFLAGS = -g -02 后面添加 -fPIC 运行命令:make 运行命令:make

linux下编译GD(freetype+libjpeg+libpng+gd-devel)

1.检查freetype是否安装rpm -qa | grep freetype没有的话编译freetype 这里下载https://www.freetype.org/download.htmlhttp://download.savannah.gnu.org/releases/freetype/ ./configure --prefix=/usr/local/freetypemake && make install 即可,没有花头 2.检查libjpeg是否安装rpm -qa | grep

Mac和Linux报错: dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib的解决办法

在mac系统下,执行谷歌机器学习框架 Tesseract时,报错: dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib 原因是在/usr/local/opt/jpeg/lib/路径下找不到 libjpeg.8.dylib文件. 解决方法: 以下命令按顺序在终端进行执行: 1:   wget -c http://www.ijg.org/files/jpegsrc.v8d.tar.gz2:   tar xzf jpegs

Android压缩图片和libjpeg库

前言 Fjpeg使用 Fjpeg 注意 如何使用 如何压缩图片只改变在硬盘的存储大小 如何改变图片分辨率让其Bitmap对象可以加载到内存中 关于重载版本 开始学习之旅 补充知识的结论 修改图片分辨率 防止在Android加载Bitmap的时候oom内存溢出 解决方案1 解决方案2 希望压缩图片方便网络传输 第一种方案利用Bitmapcompress方法压缩 第二种利用libjpeg压缩 在Android50测试两个 图片压缩 在Android60测试两个 图片压缩 解释Android50和60

嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示

在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们的Linux系统没有移植任何GUI系统,就要考虑以下方面:1. 将jpeg格式解压缩为位图格式,也就是jpeg解码. 2. 将解码出来的位图格式输出到本地的LCD屏上. 在Linux系统下是通过写入帧缓冲(framebuffer)来实现的. 3. framebuffer相当于为LCD设备提供一个统一

Linux LCD 显示图片【转】

转自:https://blog.csdn.net/niepangu/article/details/50528190 BMP和JPEG图形显示程序1)  在LCD上显示BMP或JPEG图片的主流程图首先,在程序开始前.要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0.命令如下:mknod fb0 c 29 0在LCD上显示图象的主流程图如图1所示.程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图

嵌入式Linux下S3C2410的调色板彩色显示

对于一个显示设备,数据的更新率正比于画面的像素数和色彩深度的乘积.在嵌入式Linux系统中,受处理器资源配置和运算能力的制约,当使用大分辨率显示时(如在一些屏幕尺寸较大的终端上,往往需要640×480以上),需要降低显示的色彩深度.否则,由于数据处理负担过重会造成画面的抖动和不连贯.这时,调色板技术将发挥重要作用.ARM9内核的S3C2410在国内的嵌入式领域有着广泛的应用,芯片中带有LCD控制器,可支持多种分辨率.多种颜色深度的LCD显示输出.在此,将S3C2410的调色板技术,以及嵌入式Li