gpt4 book ai didi

c++ - 从 HDC 读取像素

转载 作者:行者123 更新时间:2023-11-28 03:15:13 26 4
gpt4 key购买 nike

我正在尝试读取 HDC 给定区域上的所有像素以查找是否存在颜色,目前我想出了:

IDirect3DSurface9* pSurface = 0;
p1->CreateOffscreenPlainSurface(1280, 1024,D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &pSurface, NULL);
p1->GetFrontBufferData(0, pSurface);
//assert( pSurface );
if( pSurface && GetTickCount() > dwGAKS_Fix )
{
HDC dc;
pSurface->GetDC( &dc );
COLORREF dpurp = D3DCOLOR_ARGB (255,102,0 ,153);
for( DWORD h = 610; h <= 670; h++ )
{
for( DWORD w = 480; w<=530; w++ )
{
COLORREF dwPixel = GetPixel( dc, h, w );
// CString strPixel; strPixel.Format( "Pixel col: %u at: %u X %u", dwPixel, d, i );
//if( dx_Font )
if( dwPixel == dpurp )
{
dx_Font->DrawTextA(NULL, "Shoot", strlen("Shoot"), &pos, DT_NOCLIP, D3DCOLOR_XRGB(0, 255, 0));
}
else
dx_Font->DrawTextA(NULL, "NoShoot", strlen("NoShoot"), &pos, DT_NOCLIP, D3DCOLOR_XRGB(0, 255, 0));
}
}
dwGAKS_Fix = GetTickCount() + 15;
pSurface->ReleaseDC( dc );
pSurface->Release();

但是这个解决方案很慢,非常慢,我需要一些更..呃专业的东西

编辑

D3DLOCKED_RECT d3dlocked;
if( D3D_OK == pSurface->LockRect( &d3dlocked, 0, 0 ) )
{
UINT *pixels=(UINT *)locked.pBits;
if(pixels[52+15*1024]&0xFFFFFF00==dpurp)
{

}

pSurface->UnlockRect();
}

最佳答案

GetPixel 总是很慢。您可以使用 IDirect3DSurface9::LockRect 直接访问屏幕外表面的位,然后自己扫描位图,这样会更快。

(编辑)任何给定的像素 (x,y) 都是在以下位置找到的 32 位值:

*(DWORD*)(((BYTE*)d3dlocked.pBits) + y * d3dlocked.Pitch + x * sizeof(DWORD));

您应该将值与 0x00ffffff 相乘以忽略 alpha channel 。

关于c++ - 从 HDC 读取像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119397/

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