Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

как работает PixelFormat   Найти похожие ветки 

 
Andrey_ka   (2008-11-10 12:33) [0]

создаю 2 битмапа А и С, в А загружаю картинку из файла размер 3000х2000pix
размер С устанавливаю в размер экрана (форма полноэкранная)
затем устанавливаю параметры пиксела:
a.PixelFormat:= pfDevice;
c.PixelFormat:=pfDevice;

создаю мультитаймер с параметрами
timeSetEvent(1,500,@timeproc,0,TIME_PERIODIC);
в процедуре обработчике посылаю сообщение обновить окно
InvalidateRect(handle,nil,false);

рисую
BeginPaint(handle,p);
BitBlt(c.Canvas.Handle,0,0,clientwidth,clientHeight,a.Canvas.Handle,px,py,SRCCOP Y);
..........................
BitBlt(Canvas.Handle,0,0,clientwidth,clientHeight,c.Canvas.Handle,0,0,SRCCOPY);
EndPaint(handle,p);

Вопрос вот в чем:
при параметрах пиксела
a.PixelFormat:= pfDevice;
c.PixelFormat:=pfDevice;
выдает 250 кадров в сек
тоже при pf32bit,
а вот при  pf24bit или даже pf16dit
fps падает раза в 2, почему так ведь качество хуже?

Спасибо!


 
icWasya ©   (2008-11-10 13:33) [1]

pf32bit - это одно двойное слово(4 байта) на пиксель, процессору удобнее адресовать такие данные. И скорее всего совпадает с экранным разрешением.
А прочие форматы заставляют перепаковывать информацию.


 
brother ©   (2008-11-10 13:38) [2]

> fps падает раза в 2, почему так ведь качество хуже?

думаю, перепаковка как раз и тормозит... тк качество просто так же не ухудшается)


 
Andrey_ka   (2008-11-10 14:11) [3]

тут еще проблема появилась в связи с этим перешел дописывать программу на другой комп, запускаю так:
a.PixelFormat:= pfDevice;
c.PixelFormat:=pfDevice;
670 кадров выдает, правда сообщения о нажатиях кнопок обрабатываются с задержкой сек в 5
а если поставить
a.PixelFormat:=pf32bit;
c.PixelFormat:=pf32bit;
выдает 100 кадров
а при  
a.PixelFormat:=pf32bit;
//c.PixelFormat:=pf32bit;
выдает 290
и это при розрешении 1152х864.....
если же поставить 1024х768 то при любых изменениях 65 кадров, как  с этим боротся?


 
Sapersky   (2008-11-10 15:17) [4]

pfDevice - наиболее удобный для видеокарты формат, на NT-линейке это обычно означает создание битмапа в видеопамяти и вывод с аппаратным ускорением. Только вот это ускорение в исполнении GDI зачастую работает криво ("нажатия кнопок обрабатываются с задержкой сек в 5" и т.п.). И доступ к пикселям такого битмапа работает очень медленно (на Королевстве Дельфи, кстати, есть статья о форматах битмапов).

В общем, наверное, лучше ставить pf32bit. Обычно оно быстрее 24, т.к. совпадает с форматом экранной поверхности, меньше конвертировать надо.

И зачем супер-скорости в 670 FPS, неужели 100 недостаточно?
Если таки недостаточно, имеет смысл подумать о DirectX, там эти же 670 будут без побочных эффектов.


 
Eraser ©   (2008-11-11 01:26) [5]

> [0] Andrey_ka   (10.11.08 12:33)

причина в том, что при прорисовке изображения, функция BitBlt (и её производные) конвертируют формат пикселей источника в формат приемника (в данном случае приемник - HDC экрана). Соответственно, чтобы получить максимальную производительность, нужно работать в том же формате пикселей, что и у экрана, чтобы избежать этого конвертирования.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.194 c
15-1333088061
macrodens
2012-03-30 10:14
2013.03.22
Outlook 2007


3-1283500093
6ruse
2010-09-03 11:48
2013.03.22
ТРИГЕР


2-1333011642
Вася
2012-03-29 13:00
2013.03.22
При нажатии правой кнопки мыши на DBgrid не меняется активная стр


2-1328784120
ds
2012-02-09 14:42
2013.03.22
DbGrid программная очистка ячейки


3-1285224678
Раиса
2010-09-23 10:51
2013.03.22
MS SQL 2000 и MySQL - результат разный?