gpt4 book ai didi

DirectX 设置单个像素的颜色

转载 作者:行者123 更新时间:2023-12-04 15:15:21 26 4
gpt4 key购买 nike

我在另一个线程中读到,我可以使用 Texture.Lock/Unlock 读取单个像素,但是我需要在读取像素后将它们写回纹理,这是我目前的代码

unsigned int readPixel(LPDIRECT3DTEXTURE9 pTexture, UINT x, UINT y)
{
D3DLOCKED_RECT rect;
ZeroMemory(&rect, sizeof(D3DLOCKED_RECT));
pTexture->LockRect(0, &rect, NULL, D3DLOCK_READONLY);
unsigned char *bits = (unsigned char *)rect.pBits;
unsigned int pixel = (unsigned int)&bits[rect.Pitch * y + 4 * x];
pTexture->UnlockRect(0);
return pixel;
}

所以我的问题是:
- How to write the pixels back to the texture?  
- How to get the ARGB values from this unsigned int?

((BYTE)x >> 8/16/24) 对我不起作用(函数的返回值为 688)

最佳答案

1)一种方法是使用memcpy:

memcpy( &bits[rect.Pitch * y + 4 * x]), &pixel, 4 );

2)有多种不同的方式。最简单的是定义一个结构体,如下所示:
struct ARGB
{
char b;
char g;
char r;
char a;
};

然后将您的像素加载代码更改为以下内容:
ARGB pixel;
memcpy( &pixel, &bits[rect.Pitch * y + 4 * x]), 4 );

char red = pixel.r;

您还可以使用掩码和移位获取所有值。例如
unsigned char a = (intPixel >> 24);
unsigned char r = (intPixel >> 16) & 0xff;
unsigned char g = (intPixel >> 8) & 0xff;
unsigned char b = (intPixel) & 0xff;

关于DirectX 设置单个像素的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5364054/

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