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

Вниз

создание TBitmap из нескольких   Найти похожие ветки 

 
RzCoDer ©   (2005-09-03 15:03) [0]

Есть код:
for i := 0 to 15 do
begin
for f := 0 to 15 do begin

Bitmap.Canvas.Draw(f*20,i*20,tiles[n]);

end;
end;


где Bitmap соответсвенно тбитмап; tiles - массив TBitmap; n - некий индекс.
В принципе подход работает, но уж как то слишком тормозно то есть на моём отнюдь не слабом компе при вызове функции происходит загрузка до 89% и думает примерно 100 мс, что не есть гуд, т.к. делать это надо часто и быстро. Вопрос: как можно оптимизировать код?


 
злобная танька   (2005-09-03 15:18) [1]

используй апишные функции.. BitBlt. Вроде побыстрее работает.


 
Antonn ©   (2005-09-03 15:41) [2]

RzCoDer ©   (03.09.05 15:03)
Bitmap.Canvas.Draw(

бяка... смотри [1] или в крайнем случае замени на
Bitmap.Canvas.copyrect(classes.rect(f*20,i*20,(f+1)*20,(i+1)*20) ,тут нужен канвас битмапа из массива,classes.rect(0,0,20,20));


 
RzCoDer ©   (2005-09-03 16:25) [3]

злобная танька, дело в том что я полный чайник в API, то бишь - дай фунцию кодом, плиз.

Antonn, от CopyRect эффект точно такой же :(


 
Eraser ©   (2005-09-03 16:28) [4]

RzCoDer ©   (03.09.05 16:25) [3]

Проверь чтобы PixelFormat был там и там одинаковый, если одинаковый, то врядли что-нибудь поможет.


 
Antonn ©   (2005-09-03 16:34) [5]

RzCoDer ©   (03.09.05 16:25) [3]
tiles[n]);

не может быть, значит что-то еще.
tiles[n] - это что? что из себя предствляет?


 
TUser ©   (2005-09-03 16:48) [6]

Твой код работает в среднем за 5.5-6Ms на Celeron733, 512RAM, XP prof. Компьютер образца года примерно 2001-2002-го, причем один из дешевых.

procedure TForm1.Button1Click(Sender: TObject);
var i, f: integer;
   B: TBitMap;
begin
 B:=TBitMap.Create;
 B.Width:=20;
 B.Height:=20;
 B.Canvas.Brush.Color:=clBlack;
 B.Canvas.FillRect(B.Canvas.ClipRect);

 Image1.Picture.BitMap.Width:=20*16;
 Image1.Picture.BitMap.Height:=20*16;

for i := 0 to 15 do
begin
for f := 0 to 15 do begin

 Image1.Picture.BitMap.Canvas.Draw(f*20,i*20,B);

end;
end;


 B.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
const Count = 1000;
var t: TDateTime;
   i: integer;
begin
 t:=now;
 for i:=1 to Count do
   Button1Click(nil);
 ShowMessage ("Done at "+inttostr(MillisecondsBetween(t,now))+" msec")
end;


 
RzCoDer ©   (2005-09-03 18:38) [7]

Блин, блин, блин! Я всё понял, битмапы тут не причём :( Это всё загрузка текстур в OpGL :((( хотя посредством одного трюка удалось малость замаскировать тормоза, но как это будет выглядеть на более слабых машинах, даже не знаю...



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
10-1096806739
Ivan K
2004-10-03 16:32
2005.09.25
Переменная может не иницилизироваться?


14-1125863274
Кэш третьего уровня
2005-09-04 23:47
2005.09.25
сетевое администрирование


14-1125247209
Ксардас
2005-08-28 20:40
2005.09.25
А DelphiDirect это что-то вроде WindowsUpdate?


3-1123866790
NikNet
2005-08-12 21:13
2005.09.25
Что такое CASE система?


6-1116762539
KonstantinXaker(KX)
2005-05-22 15:48
2005.09.25
Извлечение имени файла из интернет-ссылки