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