小弟寫了一個關於DIB抓圖程序,可是在不同機器上顏色值確不同? |
缺席
|
jenpeter
一般會員 發表:39 回覆:37 積分:15 註冊:2002-08-14 發送簡訊給我 |
如標題所述,我想從不同機器中取固定區塊存成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 發送簡訊給我 |
|
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |