Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с TBitmap. Как быстрее?


Страницы:   1 2

kurolesov ©   (2012-06-12 16:21:00) 

Прошу строго не судить - только пытаюсь изучать.

Необходимо в приложении отрисовывать свой битмап.

Создаю битмап.
Рисую на нем.
В дальнейшем через bitblt отрисовываю мой битмап на TImage
BitBlt(Image.Picture.Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);

Прорисовываю на битмап очень часто, в дальнейшем для отрисовки на image приходится вызывыть Image.Repaint;

Немного запутался с форматами битмапа. Какой формат выбрать для более быстрой отрисовки?

Насколько я понимаю, если не использую сканлине то лучше установить pfDevice. А если нужно scanline то лучше брать pf32bit чем pf24bit, правильно?


kurolesov   (2012-06-12 22:06:00) [21]

Как раз на win7 и проверял.
Да и заметил, что отрисовка битмапа на Image стала явно быстрее визуально при
Image.Picture.Bitmap.PixelFormat:= pfDevice;
А кстати наоборот на XP при pf32bit и pfDevice почти одинаково.
Вероятно это зависит от режима видеоадаптера.

А чем\как можно заменить TImage?
Повторюсь, я часто (около 0.05мс) отрисовываю на битмапе картинку и далее для визуального отображения вывожу через BitBlt на TImage.. и в завершенее Image.refresh для отображения результата.


Sapersky   (2012-06-12 21:36:00) [22]

На Win7 аппаратное ускорение GDI вполне может не работать, при этом pfDevice ничем не лучше pf32bit.
5-10% - это скорее всего погрешность измерений. Измеряй только время вывода, без создания, установки размеров и прочего.


kurolesov   (2012-06-12 18:51:00) [23]

хм.. а при bmp.PixelFormat:= pf16bit  работает быстрее на процентов 40 чем при pfDevice.

Не могли бы вразумить?


kurolesov   (2012-06-12 18:48:00) [24]

вот этот код:

 bmp:= TBitmap.Create;
 bmp.Width:= 2000;  bmp.Height:= 2000;

 if CheckBox1.Checked then
    bmp.PixelFormat:= pf32bit else
    bmp.PixelFormat:= pfDevice;

 bmp.Canvas.Brush.Color:= clGreen;
 bmp.Canvas.Font.Color:= clRed;
 bmp.Canvas.Font.size:= 12;

 for I := 0 to 999 do begin
    bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
    bmp.Canvas.TextOut(i,i, '12345');
 end;

 bmp.Free;

при pfDevice работает на процентов 5-10 быстрее...


kurolesov   (2012-06-12 18:01:00) [25]

Вероятно я много прочитал, а мало понял про  DDB формат.

- может все таки лучше использовать pfDevice? тоесть что "удобнее" устройству? так как я не могу знать где будет использоваться программа..


Давайте будем жрать!   (2012-06-12 17:34:00) [26]


> Но что то подсказывает что аппаратный вариант при pfDevice
> должен быть быстрее.
«Аппаратный» это один из вариантов: 1, 4, 15, 16, 24, 32 бит. Если аппаратно цвет 32 бит, то между pfDevice и pf32bit никакой разницы не будет. Если бы аппаратно было 24 бита, то pf32bit проигрывал бы, и так далее.


> А почему вы считаете что pf32bit ?
Выравнивание.


kurolesov   (2012-06-12 17:15:00) [27]

Что то по времени разницу не увидел между:

Image.Picture.Bitmap.PixelFormat:= pfDevice;
Bitmap.PixelFormat:= pfDevice;

Image.Picture.Bitmap.PixelFormat:= pf32bit;
Bitmap.PixelFormat:= pf32bit;

Но что то подсказывает что аппаратный вариант при pfDevice должен быть быстрее.
А почему вы считаете что pf32bit ? Ведь в данном случаи никакого ускорения нет. Я как понимаю лучше 32 чем 24 только для процессора, хотя размер в памяти будет больше.


brother   (2012-06-12 16:37:00) [28]

> pf32bit

имхо


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо