![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с TBitmap. Как быстрее?
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
имхо