c – libjpeg解码为BGR

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

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

因此,我想找到一种使libjpeg解码为BGR格式而不是RGB的方法.我拖网了,找不到如何配置libjpeg呢?我知道我可以再次通过内存缓冲区并手动重新排列颜色通道,但是我正在处理的应用程序是非常时间关键的,必须尽可能快速和高效.

解决方法

几个解决方案给你:

>按照建议进行转换.如果您处理4个像素组,则可以使用三个32位读写操作,位掩码和移位来执行所有操作,并且速度非常快.
>将libjpeg的YUV修改为RGB转换或刚刚完成的阶段,以便将R和B交换.
>使用libjpeg-turbo.它向后兼容libjpeg,具有SIMD加速,并提供JCS_EXT_BGR和JCS_EXT_BGRX颜色空间.
>修改源图像,使其R和B通道交换.听起来很傻,但它需要零源代码修改.

此外,你说你是速度之后,你操纵BGR数据(而不是BGRX).这对我来说没有什么意义,因为32位边界上的对齐像素可能要快得多.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...