gpt4 book ai didi

c++ - libjpeg 解码为 BGR

转载 作者:可可西里 更新时间:2023-11-01 15:47:56 24 4
gpt4 key购买 nike

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

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

因此,我想找到一种方法使 libjpeg 解码为 BGR 格式而不是 RGB。我在网上搜索过,找不到如何配置 libjpeg 来执行此操作?我知道我可以通过内存缓冲区进行额外的传递并手动重新排序颜色 channel ,但是我正在处理的应用程序对时间非常关键,必须尽可能快和高效。

最佳答案

为您提供的几种解决方案:

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

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

关于c++ - libjpeg 解码为 BGR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5619810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com