Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Как про большом числе TImage повысить fps?


Автор: Rogvold 9.4.2007, 11:09
Проблема такова: имеется форма, на которой много (порядка тысячи) компонентов TImage размера 48х48, отображающих маленькие картинки формата jpg или bmp.
Собственно, сама проблема заключается в том, что все это дело нещадно тормозит, и при передвижении мерцает.
Пожалуйста, посоветуйте что в данном случае можно предпринять и, возможно, как вообще следует при таком кол-ве изображений реализовать программу.

Буду весьма благодарен. smile 

Автор: Snowy 9.4.2007, 11:31
Быстрое решение - DoubleBuffereв := true;
Правильное - один TImage.
ЗЫ. Я подозреваю, что картинки вовсе не 48х48, а большего размера, но стретченые... В этом случае будет не тормозить, а дико и невероятно тормозить ;-)

Автор: Rogvold 9.4.2007, 11:50
Нет, сами картинки как раз меньше - 30х30, но их необходимо было стречнуть до 48х48.
А как можно через 1 TImage это сделать?

Автор: Snowy 9.4.2007, 11:57
Цитата(Rogvold @  9.4.2007,  11:50 Найти цитируемый пост)
сами картинки как раз меньше - 30х30
Всё равно - стретч хавает ресурсы. Хоть в данном случае и меньше, чем на больших картинках.

Цитата(Rogvold @  9.4.2007,  11:50 Найти цитируемый пост)
А как можно через 1 TImage это сделать?
Создать имадж нужного размера и на нём нарисовать все нужные картинки.
После этого ничего уже не стретчится, выводится всё разом.

Автор: Rogvold 9.4.2007, 12:42
Цитата
Создать имадж нужного размера и на нём нарисовать все нужные картинки

Извините, я просто новичок немного... как картинки нарисовать на канву? 

Автор: Snowy 9.4.2007, 13:31
На канву TImage'а
Canvas.StretchDraw
Подробнее - в поиск и справку.

Автор: iddqd 9.4.2007, 13:36
Один из вариантов:
CopyRect
 Copies part of an image from another canvas into the canvas.
 

Автор: Rogvold 9.4.2007, 15:41
Snowy, iddqd, спасибо большое! smile 

Автор: Rogvold 9.4.2007, 21:03
И все-таки, не мог бы мне кто-нибудь помочь - не могу никак на канвасе имага нарисовать картинку. Если есть возвожность, киньте в меня нужной процедуркой или желательно маленьким примерчиком.

Автор: Rogvold 10.4.2007, 10:46
Пишу вот что:
Код

implementation
var
pct:TBitmap;

..

procedure Tfrmmain.FormCreate(Sender: TObject);
begin
pct.Create;
pct.LoadFromFile('gfx\tilesets\104.bmp');
mim.Canvas.Draw(0, 0, pct);
end;


Вылезает еррор Access Violation. Картинка существует. 
Подскажите, из-за чего такое может быть?

Автор: Snowy 10.4.2007, 12:35
http://forum.vingrad.ru/index.php?showtopic=80671&view=findpost&p=624023

Автор: Rogvold 10.4.2007, 17:30
Cпасибо больущее!!  smile 
Если б мог - сразу пять плюсов поставил ;)
С меня пиво  smile 

P.S. тему можно закрыть - проблема решена ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)