libpng获取原始颜色通道深度
libpng getting original color channel depth
我有PNG文件,它们都有RGBA格式。不同的是,它们中的一些是RGBA8888,而另一些则是RGBA4444。经过一番挖掘,似乎如果PNG中的像素格式是RGBA4444,那么libpng会自动将其转换为RGBA8888。手册上说,如果像素格式是RGBA,深度将只有8位。
PNG_COLOR_TYPE_GRAY
(bit depths 1, 2, 4, 8, 16)
PNG_COLOR_TYPE_GRAY_ALPHA
(bit depths 8, 16)
PNG_COLOR_TYPE_PALETTE
(bit depths 1, 2, 4, 8)
PNG_COLOR_TYPE_RGB
(bit_depths 8, 16)
PNG_COLOR_TYPE_RGB_ALPHA
(bit_depths 8, 16)
有没有一种方法可以检索文件中定义的原始位深度?我需要能够判断哪个图像具有哪个通道深度,这样我就可以使用不同的格式将它们加载到OpenGL中。
使用libpng的png_get_IHDR()或png_get_bit_depth()来找出图像的深度(位/样本),使用png_get_color_type()来找到颜色类型。对于RGBA8888图像,它们将返回bit_depth=8和color_type=6(RGBA)。
没有RGBA4444 PNG格式。然而,PNG可以以PALETTE形式存储带有阿尔法图像的truecolor,将4位索引存储到RGB颜色的调色板中,阿尔法通道包含在tRNS块中,或者如您所观察到的,以RGBA8888形式存储。使用上面提到的libpng函数,或者使用任何工具查看PNG文件开头附近的IHDR块的内容,以了解位深度和颜色类型。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- OpenGL在启用深度测试时不会丢弃我的碎片
- 在AVX通道中混洗的最佳方式
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- C++尝试深度复制唯一指针时出现内存访问冲突
- 试图找到二叉树的深度
- 操纵安卓相机的深度图导致应用程序崩溃
- 深度值没有意义 R200 相机
- 空 grpc 客户端通道
- 对如何制作双链表的深度副本感到困惑?
- 以C++访问 HoloLens 2 深度图像
- 在 c++ 中使用深度复制的运算符重载
- 如何深度复制链表对象指针
- 提升图:当我的图使用 listS 作为 VertexList 时,如何调用深度优先搜索()?
- 在 OpenCV 中按深度维度排序,C++
- 如何在编译时获得多维 std::vector 的深度?
- 需要帮助生成C++深度有限的随机表达式树
- 深度缓冲区未填充阴影贴图渲染通道中的数据
- libpng获取原始颜色通道深度
- 图像深度和通道之间的差异