首先很抱歉,如果这是重复的,我找不到任何主题来回答我的问题。
我正在编写一个小程序,用于将 32 位浮点值转换为 short int(16 位)和 unsigned char(8 位)值。这是用于 HDR 图像的目的。
从这里我可以获得以下功能(没有钳位):
static inline uint8_t u8fromfloat(float x)
{
return (int)(x * 255.0f);
}
我想以同样的方式我们可以通过乘以得到short int(pow( 2,16 ) -1)
但后来我最终想到了有序抖动,尤其是拜耳抖动。要转换为 uint8_t 我想我可以使用 4x4 矩阵和 8x8 矩阵来表示无符号短。
我还想到了一个查找表来加速这个过程,这样:
uint16_t LUT[0x10000] // 2¹⁶ values contained
并存储对应于浮点数的 2^16 个无符号短值。由于 unsigned short ↔ unsigned int 之间的隐式转换,同一个表也可以用于 uint8_t
但是这样的查找表在内存中不是很大吗?还有一个人怎么会填满这样的桌子?!
现在我很困惑,你认为什么是最好的?
在 uwind 回答后编辑:现在假设我还想同时进行基本的色彩空间转换,即在转换为 U8/U16 之前,进行色彩空间转换(浮点数),然后将其缩小为 U8/U16 . 在那种情况下使用LUT不是更有效吗?是的,我仍然有索引 LUT 的问题。