gpt4 book ai didi

c - PNG 文件中 sBIT block 的用途是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:41 25 4
gpt4 key购买 nike

实际上,我不明白在 PNG 文件中使用 sBIT block 。

我正在存储来自 11 位/ channel RGB 源的 PNG 文件,因此我尽职尽责地在我的 (c) 代码中设置了 sBIT block :

...
png_color_8 sig_bit;

sig_bit.gray = 0;
sig_bit.alpha = 0;
sig_bit.red = 11;
sig_bit.green = 11;
sig_bit.blue = 11;

png_set_sBIT(png_ptr, info_ptr, &sig_bit);
...
/* save the png */

当使用 Windows 查看器( native Vista 图片查看器/Paint.net)查看图像时,低 8 位被截断,所以我只能看到高 3 位。我本以为 sBIT block 会自动指示读者将像素左移 5 位,以 MSB 证明数据显示。好像不是这样的。

当我在我的代码中打开具有或不具有 sBIT block 的 png 文件时,并执行以下操作:

png_color_8p sig_bit;
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT)) {
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
png_set_shift(png_ptr, sig_bit);
}

像素数据相同。

sBIT block 的使用模型是什么?我能否以某种方式使用 sBIT block 来 MSB 验证像素数据以供查看,但看到“原始”数据以进行数值分析?

最佳答案

sBIT block 告诉解码器像素数据中的有效位数。本质上,它告诉解码器数据已经左移以适应标准位深度。例如。对于 11 位数据的情况,您应该将像素向左移动 5 位并将它们存储为每像素 16 位。解码器将看到在每种颜色的 16 位中,只有前 11 位是重要的,因此它可以潜在地以新格式重新压缩图像,因为它知道 16 位中只有 11 位有用。

关于c - PNG 文件中 sBIT block 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503994/

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