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

Вниз

Оптимизация прорисовки формы   Найти похожие ветки 

 
oleg_   (2006-01-25 13:13) [0]

Занялся вот сабжем и вычитал что Canvas.Draw ужасно тормозной метод, попробовал проверить быстродействие еще двух: Canvas.CopyRect и апишного bitblt

Времена их работы практические одинаковые получились.
Чем  еще можно побыстрее  скопировать битмап?

Вот как мерил:

t1:=time;
for dd := 1 to 1000000 do
  obj.Canvas.CopyRect(Bounds(x, y, bm1.Width, bm1.Height), bm1.Canvas, Bounds(0, 0, bm1.Width, bm1.Height));
t2:=time;
for dd := 1 to 1000000 do
  bitblt(obj.Canvas.Handle,x,y,bm1.Width,bm1.Height,Bm1.Canvas.Handle,0,0,SRCCOPY);//PATCOPY
t3:=time;
for dd := 1 to 1000000 do
  obj.Canvas.Draw(x,y, bm1);
t4:=time;

td1:=t2-t1;
td2:=t3-t2;
td3:=t4-t3;


 
oleg_   (2006-01-25 21:01) [1]

подскажите кто какой метод выбирает?


 
antonn ©   (2006-01-25 21:02) [2]

не точно мерил, нужно примерно так:

var
Divisor:Int64; T1:Int64; TotalTime :Extended; iii:integer;
begin
if QueryPerformanceFrequency(Divisor) then
begin
  QueryPerformanceCounter(T1);
  TotalTime := T1;

 for iii:=0 to 199 do
 Canvas.BrushCopy( rect(0,0,Image1.Width,Image1.Height),Image1.Picture.Bitmap,rect(0,0,Image1.Width,Image1.Height),clblack );
 
  QueryPerformanceCounter(T1);
  TotalTime:=(T1-TotalTime)/Divisor;
  caption:=floattostr(TotalTime); //вывод времени
end;


bitblt - думаю, самое быстрое, что есть...


 
antonn ©   (2006-01-25 21:06) [3]

но я обычно избегаю canvas, работаю с TBitmap и scanline.



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

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

Наверх




Память: 0.47 MB
Время: 0.037 c
15-1139406897
RDA
2006-02-08 16:54
2006.02.26
Ну вот и все. Борланд нас покидает?


6-1132258793
Иван12345
2005-11-17 23:19
2006.02.26
Передача информации о постоянной активности приложения


3-1135939544
winsido
2005-12-30 13:45
2006.02.26
уникалный номер


2-1139751801
smus811
2006-02-12 16:43
2006.02.26
Регистронезависимые запросы.


1-1138109505
dan317
2006-01-24 16:31
2006.02.26
TDBGridEh, переменная высота строк - возможно ?