怎么把A16B16G16R16F转换成ARGB32?

问题描述

| 我正在编写一个C ++程序,该程序读取纹理图像文件,然后将其转换并另存为.png。 当我遇到ARGB半精度浮点像素格式时。 我尝试了每个像素的ARGB通道 读取16位 转换为32bit C原始浮点数 乘以255或1(我不确定半浮点值的有效范围是多少) 转换为BYTE值 但我看不到可见的图像。也许convert方法不正确。 将半精度浮点数转换为8bit色彩强度值的公式是什么?     

解决方法

        此处的博客文章中解释了读取半浮点数的详细信息,包括代码: http://fpmurphy.blogspot.com/2008/12/half-precision-floating-point-format_14.html 读完浮动信息后,您将必须执行色调映射操作,以获取介于PNG允许的0..255范围内的值。此操作称为“音调映射”,您可以通过多种选择来执行此操作。一个非常简单的事情是找到图像中的最大值M并将所有像素强度缩放255 / M以进入所需范围。但是,有些算法涉及的更多。 根据图像的来源,您也可以在写出图像之前应用伽玛校正。因为无论如何都必须使用浮点值,所以我建议使用浮点数进行所有计算,并进行浮点数->字节转换,这是避免出现像条带这样的图像质量问题的最后一步。