从屏幕抓取的原始数据是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)

E680I RGB转换成JPG相关推荐

  1. RGB转换成Lab具体算法

    最近在搞颜色空间,想找找RGB到LAB的颜色转换具体算法(RGB---XYZ----Lab),查了很多资料,最后终于写出了具体算法,下面给出PS中具体转换算法和CIE具体转换算法,二者之间的转换还是有 ...

  2. RGB转换成CMYK

    1:RGB色彩模式是发光的,存在于屏幕等显示设备中.不存在于印刷品中.CMYK色彩模式是反光的,需要外界辅助光源才能被感知,它是印刷品唯一的色彩模式. 2:色彩数量上RGB色域的颜色数比CMYK多出许 ...

  3. 记录遇到的问题之---把16进制的颜色rgb转换成‘#’形式

    方法一: ​ function setRgbTo16(str) {let reg = /^(rgb|RGB)/if (!reg.test(str)) {return}var arr = str.sli ...

  4. 将RGB转换成ToWin32值

    string iColor = ColorTranslator.ToWin32(Color.FromArgb(254, 254, 146)).ToString(); 转载于:https://www.c ...

  5. HTML把cmyk转换为RGB,CMYK在线转换成pantone色卡号,cmyk转换对应潘通色号

    Cyan(C) % Magenta(M) % Yellow(Y) % Key (black)K % 最接近的潘通色号是: 选择需要集中接近颜色 16 32 48 64 80 96 RGB : (255 ...

  6. 彩色图如何转换成灰度

    RGB转换成灰度图像的一个常用公式是: Gray = R0.299 + G0.587 + B*0.114 对RGB 加权平均

  7. Opencv C++成长之路(七):RGB转换灰度图像

    转换结果 原图像 灰度图像 Show me the code #include <iostream> #include <string> #include <opencv ...

  8. nodejs将图片的像素值提取出来将RGBA转换成16位彩色

    nodejs将图片的像素值提取出来将RGBA转换成16位彩色 RGBA转16位彩色的原理 RGBA由4*8bit组成(255, 255, 255,255),16位彩色为2*8bit组成.16位彩色需要 ...

  9. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

最新文章

  1. apache虚拟机的开启iis apache共存 apache 的设置(报错 找不到 Not found)
  2. BugkuCTF web3
  3. 手机端实现点击复制功能
  4. 板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!
  5. Linux部署oracle11g,linux环境下部署Oracle11g
  6. H264基本概念之 宏块、片和片组
  7. caffe的finetuning是如何更新网络参数的?
  8. r语言作业:出租车数据基础数据分析、时间处理等
  9. kitti2bag将KITTI原始数据转换为rosbag
  10. 【唐宇迪】神经网络原理解读与整体架构
  11. AlphaPose(RMPE)区域多人姿态估计理解
  12. java outofmemory怎么解决_java.lang.OutOfMemoryError异常解决方法
  13. c语言青蛙跳答案是多少啊,青蛙跳台阶问题(示例代码)
  14. 你应该知道的一些微信技巧
  15. 无法打开Win10计算机管理,win10系统我的电脑管理打不开怎么办
  16. java生成树形Excel_poi从excel中读取父子关系型(树形)数据结构到数据库
  17. 年后跳槽全过程总结(上)——从面试准备到拿到offer
  18. js购物车功能php,使用JS实现购物车功能步骤详解
  19. 对于分布式集群,应该思考什么问题?
  20. NetXpert XG解决方案迎接新挑战!

热门文章

  1. 一文看懂华为新品发布会 折叠屏新机MateXs最抢眼
  2. DGL API on PyTorch
  3. python找出两个列表不同元素_python 找出两个列表的相同元素与不同元素
  4. 树莓派不讲武德,自研双核MCU Pico,STM32哭晕在厕所!
  5. JAVA--命令行窗口-java运行报错:Error: A JNI error has occurred,please check your installation and try again
  6. 判断两个对象的值是否都相等
  7. oracle青蛙软件下载,青蛙·app
  8. 垃圾分类垃圾回收从我做起主题PPT模板
  9. linux服务器安装mysql数据库并通过本地Navicat连接访问远程mysq数据库
  10. linux上vi好用的插件,Vim好用的插件: vundle