簡體   English   中英

如何讀取Direct3D紋理像素

[英]How to read direct3d texture pixels

因此,我有一個x8r8g8b8格式的IDirect3DSurface9,其中包含后緩沖區的內容。 當我在其上調用LockRect時,我可以訪問包含pBits的結構,指向我假定的像素的指針和整數Pitch(我不清楚其用途)。

如何讀取單個像素?

Visual Studio 2008年C ++

鎖定區域存儲在D3DLOCKED_RECT中 我從未使用過它,但是文檔說它是“表面一行中的字節數”。 實際上,人們通常將其稱為“大步前進”(某些術語在MSDN中進行了解釋)。

例如,如果一個像素有4個字節(XRGB的每個分量為8位),並且紋理寬度為7,則通常將圖像存儲為8 * 4字節而不是7 * 4字節,因為如果使用以下命令可以更快地訪問內存數據是DWORD對齊的。

因此,為了讀取像素[x,y],您必須閱讀

uint8_t *pixels = rect.pBits;
uint32_t *mypixel = (uint32_t*)&pixels[rect.Pitch*y + 4*x];

其中4是像素的大小。 *myPixel將是本例中像素的內容。

是的,您將像這樣訪問像素的各個RGB分量。

不使用像素的第一個字節,但是每個像素使用4個字節會更有效,這樣每個像素都在32Bit邊界上對齊(這也是為什么有間距的原因)。

在您的示例中,未使用x,但是請注意還有其他像素格式,例如ARGB,它在第一個字節中存儲alpha值(透明度)。 有時顏色也會顛倒(BGR代替RGB)。 如果不確定哪個字節對應什么顏色,一個很好的技巧是創建一個完全為紅色,綠色或藍色的紋理,然后檢查4個字節中的哪個值為255。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM