加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – libjpeg解码为BGR

发布时间:2020-12-16 03:26:12 所属栏目:百科 来源:网络整理
导读:我正在使用libjpeg将jpeg映像从磁盘解码到分配在堆上的内存缓冲区.我使用jpeg_read_scanlines从文件中读取和解码每个扫描线.这是正常工作,将每个像素解码为24位RGB值. 问题是我正在使用额外的第三方库,它需要BGR格式的缓冲区(而不是RGB).当使用这个库时,我会
我正在使用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位边界上的对齐像素可能要快得多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读