線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1867
推到 Plurk!
推到 Facebook!

小弟寫了一個關於DIB抓圖程序,可是在不同機器上顏色值確不同?

缺席
jenpeter
一般會員


發表:39
回覆:37
積分:15
註冊:2002-08-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-11-23 18:11:29 IP:59.126.xxx.xxx 訂閱
如標題所述,我想從不同機器中取固定區塊存成BMP格式去比對是否相同.
源碼如下:有高手可以幫我看看或指引一下方向我是那裡搞錯了,為何在不同電腦取同同一程式的固定區塊圖去比對,兩個圖確不相同!
有什麼解決方法嗎?感謝!


Function GetBmpFromDC(H:THandle;PicBitNum,X1,Y1,X2,Y2:Integer;Out fDcBmp:Tbitmap);
{创建一个空的Bitmap}
function CreateDibBMP(Dc: HDC;width,height: Integer): HBITMAP;
type
DibRec = record
bi: BITMAPINFOHEADER;
ct: array[0..255] of DWORD;
end;
var
Dib: DibRec;
lpBits: pointer;
temp: TBitmapInfo;
begin
dib.bi.biSize := sizeof(BITMAPINFOHEADER);
dib.bi.biWidth := width;
dib.bi.biHeight := height;
dib.bi.biBitCount := PicBitNum;
dib.bi.biPlanes := 1;
dib.bi.biCompression := 0;
dib.bi.biSizeImage := 0;
dib.bi.biClrUsed := 0;
if PicBitNum = 15 then
Dib.bi.biBitCount := 16
else if PicBitNum = 16 then
begin
Dib.bi.biCompression := BI_BITFIELDS;
dib.ct[0] := $F800;
dib.ct[1] := $07E0;
dib.ct[2] := $001F;
end;
Move(dib,temp,SizeOf(dib));
result := CreateDIBSection(Dc,temp,DIB_RGB_COLORS,lpBits,0,0);
end;
var
rc: TRect;
nScreenWidth,nScreenHeight,cx,cy: integer;
hdcScreen,hdcMemory: HDC;
TmpBmp:TBitmap;
begin
TmpBmp:=TBitMap.Create;
GetWindowRect(H, rc);
TmpBmp.Width := rc.Right - rc.Left;
TmpBmp.Height := rc.Bottom - rc.Top;
PrintWindow(H,TmpBmp.Canvas.Handle, 0);
hdcScreen :=TmpBmp.Canvas.Handle;
hdcMemory := CreateCompatibleDC(hdcScreen);
fDcBmp.Handle := CreateDibBMP(hdcScreen, x2-x1, y2-y1);
SelectObject(hdcMemory, fDcBmp.Handle);
BitBlt(hdcMemory,0,0,x2-x1,y2-y1,hdcScreen,x1,y1,SRCCOPY or $400000000 );
DeleteDC(hdcMemory);
ReleaseDC(0, hdcScreen);
TmpBmp.Free;
end;

jenpeter
一般會員


發表:39
回覆:37
積分:15
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-11-24 12:13:09 IP:59.126.xxx.xxx 訂閱
自行解決了~
allen-86
一般會員


發表:28
回覆:44
積分:19
註冊:2008-02-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-09-01 11:10:55 IP:117.95.xxx.xxx 訂閱
请教一下怎么设定为24位真彩色?

我用您写的函数 抓图可以 但是颜色值变了,跟直接用PrintScreen 按键的不一样。


===================引 用 jenpeter 文 章===================
自行解決了~
------
The empty vessels make the greatest sound.
系統時間:2018-01-21 13:04:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!