gpt4 book ai didi

c - 将 float 32 精确转换为 unsigned Short 或 unsigned char

转载 作者:行者123 更新时间:2023-11-30 17:55:32 26 4
gpt4 key购买 nike

首先,很抱歉,如果这是重复的,我找不到任何主题回答我的问题。

我正在编写一个小程序,用于将 32 位浮点值转换为短整型(16 位)和无符号字符(8 位)值。这是用于 HDR 图像的目的。

来自here我可以获得以下函数(无需夹紧):

static inline uint8_t u8fromfloat(float x)
{
return (int)(x * 255.0f);
}

我想以同样的方式,我们可以通过乘以 (pow( 2,16 ) -1) 得到短整型

但后来我最终考虑了有序抖动,尤其是拜耳抖动。要转换为 uint8_t,我想我可以使用 4x4 矩阵和 8x8 矩阵来表示无符号短整型。

我还想到了一个查找表来加速这个过程,这样:

uint16_t LUT[0x10000] // 2¹⁶ values contained

并存储对应于 float 的 2^16 个无符号短值。由于 unsigned Short ↔ unsigned int 之间的隐式转换,该表也可用于 uint8_t

但是这样的查找表占用的内存不是很大吗?另外,如何填写这样的表格?!

现在我很困惑,你认为什么是最好的?

在 uwind 回答后编辑:现在假设我也想同时进行基本的颜色空间转换,即在转换为 U8/U16 之前,进行颜色空间转换(以浮点形式),然后将其缩小到U8/U16。在这种情况下使用 LUT 不是更有效吗?是的,我仍然会遇到索引 LUT 的问题。

最佳答案

在我看来,查找表没有帮助,因为为了对其进行索引,您需要将 float 转换为某种整数类型。第 22 条军规。

该表需要 0x10000 * sizeof (uint16_t) 字节,即 128 KB。按照现代标准来看,并不算多,但另一方面,缓存也很宝贵。但是,正如我所说,该表并没有给解决方案带来太多帮助,因为您需要将浮点型转换为整数才能建立索引。

您可以创建一个由浮点的原始位重新解释为整数进行索引的表,但这必须是 32 位,这会变得非常大(8 GB 左右)。

进行您概述的直接运行时转换。

关于c - 将 float 32 精确转换为 unsigned Short 或 unsigned char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14213566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com