将16位无符号整型数组转换为32位浮点数组
Converting 16 bit unsigned int array to 32 bit float array
我使用directx 9与64位渲染目标…我需要读取渲染目标表面上的数据。每个颜色分量(a,r,g,b)用2字节(或16位x 4 = 64)编码。我如何将每个16位颜色组件转换为32位浮点变量?以下是我尝试过的:
BYTE *pData = ( BYTE* )renderTargetData;
for( UINT y = 0; y < Height; ++y )
{
for( UINT x = 0; x < width; ++x )
{
// declare 4component vector to hold 4 floats
D3DXVECTOR4 vColor;
// convert the pixel color from 16 to 32 bits
D3DXFloat16To32Array( ( FLOAT* )&vColor, ( D3DXFLOAT16* )&pData[ y + 8 * x ], 4 );
}
}
由于某些原因,这是不正确的…在转换后的一种情况下,其中一个像素的实际renderTargetData为(0,0,0,65535),我得到这个结果:(0,0,0,-131008.00)。
一般来说,将整数v
从[0..n]
范围内的整数转换为[0.0..1.0]
范围内的浮点数是:
float f = v/(float)n;
那么,在你的例子中,一个循环执行:
vColor.x = (pData[ y + 4 * x ])/65535.0f;
vColor.y = (pData[ y + 4 * x + 1 ])/65535.0f;
// ... etc.
如果我们把BYTE *pData = ( BYTE* )renderTargetData;
变成WORD *pData = ( WORD* )renderTargetData;
, 应该可以工作。
但是DX可能有一些聪明的方法来为你做这个我不知道因为我
相关文章:
- 循环访问 C++ 个字符数组的位
- 有没有办法汇总数组的位位置
- 将数组写入位图 c++
- Vizualize无符号char *数组作为位图
- 在 C 语言中将 32 位 int 块连接在 16 个字符数组中
- 从整数数组构造位集
- 对返回0数组的数组执行位"或"或"异或"运算
- 从 BYTE 数组读取 32 位整数.VC++
- 将 32 位数字快速哈希到数组中
- 在64位计算机中分配32位整数数组
- C++将32位Integer复制到字节数组中
- 将字(32/64位)写入字符数组的原子性
- 将字节数组从位图图像读取到坐标X和Y中
- 不使用64位中间数的32位乘法
- UInt64在32位系统上,需要从UInt32's字节数组生成,如何
- 为什么~size_t(0)(在大多数32位系统中== 0xFFFFFFFF)不是一个有效的数组索引?
- 布尔数组从位掩码返回不正确的值
- 数组和位图arduino
- 位操作-C/C++代码,将字符数组视为位流
- 如何将数字转换为字节数组(按位端顺序)