Форум: "Media";
Текущий архив: 2011.09.04;
Скачать: [xml.tar.bz2];
Внизмаксимально быстро считать цвет пикселя с экрана Найти похожие ветки
← →
Azat (2008-07-18 10:23) [0]Вопрос как максимально быстро считать цвет пикселя с экрана;
делал я примерно так:
BitBlt(Bitmap.Canvas.Handle, 0, 0,1024, 768, GetDC(0), 0, 0, SRCCOPY);
p:=bitmap.Canvas.Pixels[200,200];
Заранее спасибо.
← →
han_malign © (2008-07-18 11:42) [1]GetPixel?
← →
v (2008-07-18 13:07) [2]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;
← →
v (2008-07-18 13:18) [3]ой, забыл добавить, - в этом примере сдирается цвет пиксела под курсором
← →
v (2008-07-18 13:58) [4]елки-палки, когда же я проснусь ;-) конечно GetPixel. прошу прощения. ток про ReleaseDC не забываем...
← →
Омлет (2008-07-18 14:49) [5]> Вопрос как максимально быстро считать цвет пикселя с экрана;
Если нужно только один пиксель, то лучше не использовать BitBlt, а делать сразу GetPixel c дескриптора экрана.
> v (18.07.08 13:07) [2]
> 3) если у битмапа формат pf32bit, то значение пиксела из битмапа можно брать напрямую через ScanLine
При любом формате лучше юзать ScanLine. А еще лучше http://www.delphimaster.ru/articles/pixels/index.html
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2011.09.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c