Главная страница
    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.039 c
14-1125409925
oldman
2005-08-30 17:52
2005.09.25
Старый фидошный баян...


2-1124355965
Гость22
2005-08-18 13:06
2005.09.25
Как в поле DBLookupComboBox1 уствновить необходимое ...


14-1125300493
red_imp
2005-08-29 11:28
2005.09.25
Народ помогите где найти книгу


8-1115673129
Пикт
2005-05-10 01:12
2005.09.25
Как изменить яркость JPG-картикни ?


4-1122551436
Icar
2005-07-28 15:50
2005.09.25
LPT-порт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский