首先抱歉,如果这是重复的,我找不到任何主题回答我的问题。将float 32精确地转换为unsigned short或unsigned char
我正在编写一个小程序,将用于将32位浮点值转换为短整型(16位)和无符号字符(8位)值。这是用于HDR图像的目的。
从here 我能得到下面的函数(无钳位):
static inline uint8_t u8fromfloat(float x)
{
return (int)(x * 255.0f);
}
我想,以同样的方式,我们可以通过(pow(2,16) -1)
相乘得到短整型但后来我结束了思考有序抖动,特别是拜耳抖动。 要转换为uint8_t我想我可以使用4x4矩阵和8 * 8矩阵作为unsigned short。
我还想到了查找表的来加速的过程中,这种方式:相应于浮子
uint16_t LUT[0x10000] // 2^16 values contained
和存储2^16无符号短值。 这同一个表可以再用于uint8_t以及因为隐式转换之间 无符号短< - > unsigned int类型
但不会像这样的查询表在内存巨大?还有人会如何填满这样的桌子?!
现在我很困惑,根据你最好什么? 感谢您的帮助!
uwind后编辑回答:现在我想说,我也想同时进行基本色彩空间转换,即在转换为U8/U16之前,做一个色彩空间转换(以浮点形式),然后缩小它到U8/U16。在这种情况下不会使用lut更高效?是的,我仍然有问题,以指数卢特..
。
我认为这是一个C问题。 – Jodrell
是的,我忘了确切地说,它是C/C++ – Lex