-
Вопрос как максимально быстро считать цвет пикселя с экрана; делал я примерно так: BitBlt(Bitmap.Canvas.Handle, 0, 0,1024, 768, GetDC(0), 0, 0, SRCCOPY); p:=bitmap.Canvas.Pixels[200,200];
Заранее спасибо.
-
GetPixel?
-
1) почему бы не блитить только один нужный пиксел в битмап 1х1? 2) после GetDC хорошо бы сделать ReleaseDC 3) если у битмапа формат pf32bit, то значение пиксела из битмапа можно брать напрямую через ScanLine, ток нужно будет поменять порядок с BGR на RGB. Прямой доступ быстрее чем Canvas.Pixels.
bmp := TBitmap.Create; bmp.Width := 1; bmp.Height := 1; bmp.PixelFormat := pf32bit;
... var c: TColor; dc: cardinal; p: TPoint; begin GetCursorPos(p); dc := GetDC(0); BitBlt(bmp.Canvas.Handle,0,0,1,1,dc,p.x,p.y,SRCCOPY); releasedc(0,dc); c := pinteger(bmp.Scanline[0])^; c := ((c and $FF) shl 16) or (c and $FF00) or ((c shr 16) and $FF); <делаем с цветом "с" че хотим> end;
-
ой, забыл добавить, - в этом примере сдирается цвет пиксела под курсором
-
елки-палки, когда же я проснусь ;-) конечно GetPixel. прошу прощения. ток про ReleaseDC не забываем...
-
> Вопрос как максимально быстро считать цвет пикселя с экрана; Если нужно только один пиксель, то лучше не использовать BitBlt, а делать сразу GetPixel c дескриптора экрана. > v (18.07.08 13:07) [2]> 3) если у битмапа формат pf32bit, то значение пиксела из битмапа можно брать напрямую через ScanLine При любом формате лучше юзать ScanLine. А еще лучше http://www.delphimaster.ru/articles/pixels/index.html
|