Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

создание 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
14-1122216802
Ptr
2005-07-24 18:53
2005.09.25
Ищу работу программиста-стажера на Delphi в Москве


14-1124200197
Piter
2005-08-16 17:49
2005.09.25
LJ дневник человека, служащего в армии :)


5-1099854489
Vcoder
2004-11-07 22:08
2005.09.25
Быстрый вывод на экран


14-1125250066
Ксардас
2005-08-28 21:27
2005.09.25
Что это за сетевая атака такая Helkern?


4-1122815186
Borland
2005-07-31 17:06
2005.09.25
CD_ROM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский