Parsing 如何通过DirectX中的texutre进行解析?(IDirect3DTexture9*)

Parsing 如何通过DirectX中的texutre进行解析?(IDirect3DTexture9*),parsing,graphics,directx,textures,Parsing,Graphics,Directx,Textures,我一直试图找出如何在directx中解析纹理,原因有两个:编写自己的纹理格式和操作现有IDirect3DTexture9类型纹理中的数据 我一直在研究IDirect3DTexture9::LockRect()函数,但我不确定它是如何工作的,我在D3DLOCKED中从中得到的void*pBits是否是纹理中的数据?这是否意味着我可以通过将其转换为D3DX颜色或其他方式来阅读 我只想能够读入rgba值,如果我想写的话,就写它们 真的不知道去哪里,任何帮助都将不胜感激 pBits值是指向实际纹理数据的

我一直试图找出如何在directx中解析纹理,原因有两个:编写自己的纹理格式和操作现有IDirect3DTexture9类型纹理中的数据

我一直在研究IDirect3DTexture9::LockRect()函数,但我不确定它是如何工作的,我在D3DLOCKED中从中得到的void*pBits是否是纹理中的数据?这是否意味着我可以通过将其转换为D3DX颜色或其他方式来阅读

我只想能够读入rgba值,如果我想写的话,就写它们


真的不知道去哪里,任何帮助都将不胜感激

pBits值是指向实际纹理数据的指针。数据的格式由您在创建纹理时指定

音高是一行中的字节数。这不一定(尽管通常是)纹理的宽度乘以每个像素的字节数

因此,如果您创建了D3DFMT_A32B32G32R32F纹理,那么您确实可以将pBits指针投射到D3DXCOLOR指针,并访问颜色组件,如数组(即COLOR[count].r等)

但是,如果它是32位的,那么您将需要一个如下所示的结构(我不确定我的组件是否正确,但您可以很容易地找出正确的顺序)

然后,您可以将PBIT强制转换为ARGB指针,并以相同的方式访问它

当你将压缩的纹理加入其中时,事情会变得复杂得多,但这是最基本的

struct ARGB
{
    unsigned char a;
    unsigned char r;
    unsigned char g;
    unsigned char b;
};