微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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位边界上的对齐像素可能要快得多.

原文地址:https://www.jb51.cc/c/111416.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐