Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.46 MB
Время: 0.069 c
6-1247157100
axis_of_evil
2009-07-09 20:31
2013.03.22
TidSMTP


15-1312895393
Kerk
2011-08-09 17:09
2013.03.22
Шахматный турнир


15-1330115402
Юрий
2012-02-25 00:30
2013.03.22
С днем рождения ! 25 февраля 2012 суббота


2-1338534766
leklerk
2012-06-01 11:12
2013.03.22
Вторичная форма в центре главной


15-1352825506
>|<
2012-11-13 20:51
2013.03.22
Определение границ максимальной плотности точек





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский