Форум: "Media";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизкак работает 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 вся ветка
Форум: "Media";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.12 c