Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1305138754
NailMan
2011-05-11 22:32
2011.09.04
Ну наконец то начало что то получаться


4-1250283837
Alexei
2009-08-15 01:03
2011.09.04
Как определить момент манипуляции устройством ввода?


2-1305711102
volkafff
2011-05-18 13:31
2011.09.04
Блокировка доступа к интернету


2-1305792448
Артур
2011-05-19 12:07
2011.09.04
Сохранение наследника TPersistent


2-1305694815
samalex2504
2011-05-18 09:00
2011.09.04
Ошибка конвертирования данных из Excel в тип Data





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский