gpt4 book ai didi

c++ - 将 16 位无符号整数数组转换为 32 位 float 组

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:22 27 4
gpt4 key购买 nike

我正在将 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 > 是:

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++ - 将 16 位无符号整数数组转换为 32 位 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570135/

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