Есть такая потребность сделать аналог GetPixel, но более быстрый. Вот какой код получился после поиска в интеренете. Где-то выкладывали на с++. Но эта функция и GetPixel выдают разные значения. В чем может быть причина?
| Код | function MyGetPixel(hGame:HWND; x,y:integer):COLORREF; const BITS_IN_BYTE = 8; GR_MODE_BYTES = 4; GR_MODE_BITS = GR_MODE_BYTES * BITS_IN_BYTE;
var pixel:COLORREF; BMI:TBITMAPINFO; hGDC : HDC; Bitp : integer; hTmpDC : HDC ; hTmpBmp : HBITMAP; TMP : Integer;
begin // BMI:=0; hGDC:=GetDC(hGame); Bitp:=GetDeviceCaps(hGDC, BITSPIXEL); hTmpDC:=CreateCompatibleDC(hGDC); hTmpBmp:=CreateCompatibleBitmap(hGDC,1,1);
SelectObject(hTmpDC,hTmpBmp); BitBlt(hTmpDC,0,0,1,1,hGDC,x,y,SRCCOPY); BMI.bmiHeader.biSize := sizeof(BMI.bmiHeader); BMI.bmiHeader.biWidth := 1; BMI.bmiHeader.biHeight := 1; BMI.bmiHeader.biPlanes := 1; BMI.bmiHeader.biBitCount := Bitp; //GR_MODE_BITS; BMI.bmiHeader.biCompression := BI_RGB; BMI.bmiHeader.biSizeImage:=Bitp div 8; //{GR_MODE_BYTES*}bmi.bmiHeader.biWidth * bmi.bmiHeader.biHeight; BMI.bmiHeader.biClrUsed := 0; BMI.bmiHeader.biClrImportant := 0; TMP:=GetDIBits(hTmpDC,hTmpBmp,0,1,@pixel,BMI, DIB_RGB_COLORS); Pixel:=Pixel and $FFFFFF; ReleaseDC(hGame,hGDC); Result:=pixel; end;
|
|