前端之家收集整理的这篇文章主要介绍了
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.f2er.com/c/111416.html