如何将A16B16G16R16F转换为ARGB32
How to convert A16B16G16R16F to ARGB32?
我正在编写一个C++程序,它读取纹理图像文件,然后转换并保存为.png.
当我遇到ARGB半精度浮点像素格式。
我尝试了每个像素ARGB通道
- 读取16位
- 转换为32位c基元浮点
- 乘以255或1(我不确定半浮点值的有效范围是多少)
- 强制转换为BYTE值
但我无法获得可见图像。转换方法可能不正确。
将半精度浮点转换为8位颜色强度值的公式是什么?
在这里的一篇博客文章中解释了读取半浮点的细节,包括代码:
http://fpmurphy.blogspot.com/2008/12/half-precision-floating-point-format_14.html
在读取浮点数后,您必须执行色调映射操作,以获得PNG允许的0..255范围内的值。这种操作被称为"色调映射",您可以选择执行它。一件非常简单的事情是找到图像中的最大值M,并将所有像素强度缩放255/M以进入所需范围。不过,还有一些算法涉及的内容要多得多。
根据图像的来源,您也可以在写出图像之前应用伽玛校正。因为无论如何都必须使用浮点值,所以我建议使用浮点进行所有计算,并将浮点->字节转换作为最后一步,以避免出现条纹等图像质量问题。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 如何将A16B16G16R16F转换为ARGB32