E680I RGB转换成JPG

从屏幕抓取的原始数据是RGB565格式的——有的摄像头驱动支持直接抓取RGB888的格式,但我的不支持。如果想转换成JPEG,调用 JPEGLIB的话,先要转换成RGB888的格式。这个过程的转换,可以同时完成将图像倒置、和RGB位顺序变换。

RGB565 转换成RGB888,请参考前面的一贴。

下面是RGB24转换成JPG的过程
// bmp24 是整个RGB888图片的数据

       struct  jpeg_compress_struct jcs;

    
//  声明错误处理器,并赋值给jcs.err域
     struct  jpeg_error_mgr jem;
    jcs.err 
=  jpeg_std_error( & jem);

    jpeg_create_compress(
& jcs);

// 2、指定压缩后的图像所存放的目标文件,注意,目标文件应以二进制模式打开

      jpgFile
= fopen( " bmp24spp.jpg " , " wb " );
    
if  (jpgFile == NULL) {
          free(bmp24);
          
return 0;
    }

    jpeg_stdio_dest(
& jcs, jpgFile);

// 3、设置压缩参数,主要参数有

      jcs.image_width 
=  width;       //  为图的宽和高,单位为像素
    jcs.image_height  =  height;
    jcs.input_components 
=   3 ;      // 色彩通道数 //  在此为1,表示灰度图, 如果是彩色位图,则为3
    jcs.in_color_space  =  JCS_RGB;  // 色彩空间 // JCS_GRAYSCALE表示灰度图, JCS_RGB 表示彩色图像

    jpeg_set_defaults(
& jcs);
    jpeg_set_quality (
& jcs,  60 1 ); // 压缩质量

// 4、上面的工作准备完成后,就可以压缩了,压缩过程非常简单,首先调用 jpeg_start_compress,
// 然后可以对每一行进行压缩,也可以对若干行进行压缩,甚至可以对整个的图像进行一次压缩,如下:

    jpeg_start_compress(
& jcs,  1 );

    JSAMPROW row_pointer[
1 ];  //  一行位图
     int  row_stride;           //  每一行的字节数

     row_stride 
=  jcs.image_width * 3 ;   //  如果不是索引图,此处需要乘以3

    
//  对每一行进行压缩
     while  (jcs.next_scanline  <  height)  {
        row_pointer[
0= & bmp24[jcs.next_scanline * row_stride];
        jpeg_write_scanlines(
&jcs, row_pointer, 1);
    }


    jpeg_finish_compress(
& jcs); // 压缩完成后,记得要调用jpeg_finish_compress函数

// 5、最后就是释放压缩工作过程中所申请的资源了,主要就是jpeg压缩对象,由于在本例中我是直接用的局部变量,
// 所以只需调用jpeg_destroy_compress这个函数即可,如下:

    jpeg_destroy_compress(
& jcs);
 
可以看出,使用了第三方的库之后,转换的过程很简单。不过,有个不完整的地方:如果想全在内存中完成,有点麻烦。


环境:
Cygwin
arm-linux-gcc
jpeg-6b

编辑工具:
Notepad++

运行环境:
Moto E680I(Linux/armv5tel 2.4.20_mvlcee30-mainstone)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值