opj_image_comp 结构的 bpp 和 prec 记录到底是啥

Posted

技术标签:

【中文标题】opj_image_comp 结构的 bpp 和 prec 记录到底是啥【英文标题】:What exactly are bpp and prec records of opj_image_comp structureopj_image_comp 结构的 bpp 和 prec 记录到底是什么 【发布时间】:2021-02-26 13:13:04 【问题描述】:

根据 doxygen 文档 (http://www.openjpeg.org/doxygen/structopj__image__comp.html),opj_image_comp 结构包含两个让我感到困惑的字段:

精确度:精度 bpp:以位为单位的图像深度

仅基于此信息,我假设具有 8 位像素 (0-255) 的图像的 bpp=8。但是当我解压缩一些 8 位单声道 .j2k 文件时,我发现 prec=8 和 bpp=0。

那么,prec 和 bpp 究竟包含什么?

如果这对答案有任何影响,我正在使用 OpenJPEG v2.3。

非常感谢。

【问题讨论】:

【参考方案1】:

我设法通过更多挖掘找到了更多信息。

prec 字段包含用于编码图像的位数。这对应于 Image and Tile Size (SIZ) 标记段中 Ssiz 字段的低 7 位。

我还没有弄清楚 OpenJPEG 结构 opj_image_comp_t 中的 bpp 字段实际上包含什么。

【讨论】:

嗨!你不认为你对此有更多的了解吗?我注意到github.com/uclouvain/openjpeg/blob/master/tests/… 只设置了prec 并且有一条评论说“bpp 没用”,但是对于它没用的东西会很好 我能找到“使用”的 bpp 的唯一地方是 src/lib/openjp2/j2k.c。在验证图像组件是否与指定的影院或 IMF 配置文件兼容时使用它。但除此之外,我在执行压缩时找不到它们实际被使用。 已经搜索了更多,但没有找到任何东西,因此该项目存在问题:github.com/uclouvain/openjpeg/issues/1379 刚刚收到回复,bpp 正在消失:github.com/uclouvain/openjpeg/pull/1383【参考方案2】:

bpp 是一个冗余字段,不应使用。为了鼓励这一点,最近有人deprecated by the author,说:

bpp 与 prec 是多余的,并且几乎从未由库设置,除了 通过 opj_image_create()。这种变化应该不会影响现有的, 工作,API 的用户,应该已经使用 prec 来获取 工作正常。

根据问题,prec 是每个通道的位深度。因此,对于无符号通道,有效值将在 [0, 2prec-1] 中。

【讨论】:

以上是关于opj_image_comp 结构的 bpp 和 prec 记录到底是啥的主要内容,如果未能解决你的问题,请参考以下文章

lcd中像素深度bpp和像素格式(比如RGB,YUV)的关系

Spring BPP中优雅的创建动态代理Bean

LCD编程_使用调色板

使用相同的自定义调色板将 8bpp 索引位图转换为 24bpp 并再次转换

1bpp 单色 BMP

是否可以制作一个 24 bpp 且没有 alpha 通道的 NSBitmapImageRep?