Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизОптимизация прорисовки формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c