-
Здравствуйте.
Помогите, пожалуйста, сделать снимок части рабочего стола.
Я пользуюсь таким кодом:
DC := GetDC( 0 ); for i:=1 to 6 do begin for j:=1 to 12 do begin cz[i,j]:=GetPixel( DC, xz[j], yz[i] ); end; end; ReleaseDC(0, DC);
Здесь я получаю снимок всего рабочего стола, и заполняю двухмерный массив цветами пикселов с нужными мне координатами в нижней левой части экрана. Но дело в том, что делается снимок всего рабочего стола, а можно ли делать снимок заданной области рабочего стола (например нижний левый угол с координатами от 0,700 до 250,900). Возможно тогда будет программа работать быстрее? Так как эту процедуру вызываю по таймеру каждые 0,5сек. в течении 10минут без перерыва и бывают часто зависания программы.
Спасибо.
-
Копируйте с рабочего стола в TBitmap функцией Bitblt, а потом обращайтесь к битмапу попиксельно.
bmp := TBitmap.Create; bmp.Height := 200; bmp.Width := 250; BitBlt(bmp.Canvas.Handle, 0, 0, 250, 200, DC, 0, 700, SRCCOPY); bmp.free;
-
> Но дело в том, что делается снимок всего рабочего стола
Вот прямо-таки делается? Вы не в ту степь смотрите. Здесь явно выраженная проблема X-Y-Z
-
> Копируйте с рабочего стола в TBitmap функцией Bitblt, а > потом обращайтесь к битмапу попиксельно. > ? >
А не будет ли это еще тяжелее в плане производительности (для процессора), чем мой вариант?
-
> Елена (14.06.16 15:16) [3] > А не будет ли это еще тяжелее в плане производительности > (для процессора), чем мой вариант?
Сделать то чего хочешь? Снимок с экрана и по всей видимости много снимков за энн-ое количество времени. Так?
-
> Вот прямо-таки делается?
Ну да, написано: DC := GetDC( 0 ) и что ж это по-твоему как не 'снимок всего рабочего стола', если даже произвольные пиксели оттуда повыдёргивать можно ))
-
> NoUser © (14.06.16 15:56) [5] > Ну да, написано: DC := GetDC( 0 ) и что ж это по-твоему > как не 'снимок всего рабочего стола'
Понял, так и запишу в свой букварь. (оверлеи вычеркиваю :)
-
> Елена (14.06.16 15:16) [3]
> А не будет ли это еще тяжелее в плане производительности > (для процессора), чем мой вариант?
в плане производительности придумать что-то тяжелее вашего варианта сложно.
-
В вашем коде вообще не делается никаких снимков/скриншотов. Зато используется GetPixel(), которое до сих пор (во всяком случае до Win7 включительно) жутко тормознутое.
Сделайте как вам посоветовали в [1], помимо скорости ещё и других массивов вам не понадобится, диб-секция и так массив (выравненный правда в основном).
|