首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libjpeg解码到BGR

libjpeg解码到BGR
EN

Stack Overflow用户
提问于 2011-04-11 18:12:37
回答 6查看 8.2K关注 0票数 10

我使用libjpeg将jpeg图像从磁盘解码到堆上分配的内存缓冲区。我使用jpeg_read_scanlines从文件中读取和解码每条扫描线。这是完美的工作,将每个像素解码为24位RGB值。

问题是我使用了一个额外的第三方库,它需要一个BGR格式的缓冲区(而不是RGB)。当使用这个库时,我得到了奇怪的结果,因为通道的顺序是错误的。

因此,我想找到一种方法使libjpeg解码为BGR格式,而不是RGB格式。我已经在网上搜索过了,找不到如何配置libjpeg来做到这一点?我知道我可以对内存缓冲区进行额外的遍历,并手动重新排序颜色通道,但是我正在开发的应用程序对时间要求极高,必须尽可能地快速和高效。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-11 19:17:10

为您提供以下几种解决方案:

  • 按照建议执行转换。如果你在4个像素的组上工作,你可以通过三个32位的读写,位掩码和移位来做任何事情,并且速度非常快。
  • 修改libjpeg的YUV到RGB转换或紧接着的阶段,以便它交换R和B。
  • 使用libjpeg-turbo。它向后兼容libjpeg,具有SIMD加速,并提供JCS_EXT_BGRJCS_EXT_BGRX colorspaces.
  • Modify您的源图像,以便他们的R和B声道互换。听起来很傻,但它不需要源代码modification.

此外,你说你在追求速度,但你操纵的是BGR数据(而不是BGRX)。这对我来说没有多大意义,因为在32位边界上对齐像素可能会快得多。

票数 10
EN

Stack Overflow用户

发布于 2013-10-05 18:51:44

正如Antun Tun所说,配置在jmorecfg.h中。在我的libjpeg (v7)版本中,它在第320行:

代码语言:javascript
复制
#define RGB_RED     0   /* Offset of Red in an RGB scanline element */
#define RGB_GREEN   1   /* Offset of Green */
#define RGB_BLUE    2   /* Offset of Blue */

因此,您只需将其更改为:

代码语言:javascript
复制
#define RGB_RED     2   /* Offset of Red in an RGB scanline element */
#define RGB_GREEN   1   /* Offset of Green */
#define RGB_BLUE    0   /* Offset of Blue */

你就完事了。评论还说:

代码语言:javascript
复制
/*
 * RESTRICTIONS:
 * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
 * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
 *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
 * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
 *    is not 3 (they don't understand about dummy color components!).  So you
 *    can't use color quantization if you change that value.
 */
票数 4
EN

Stack Overflow用户

发布于 2013-02-17 00:01:17

JPEGLIB指出,您必须修改jmorecfg.h才能更改通常的R G B值顺序。这是指向document:http://www.opensource.apple.com/source/tcl/tcl-20/tcl_ext/tkimg/tkimg/libjpeg/libjpeg.doc的链接,它位于数据格式部分

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5619810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档