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

Вниз

Помогите пожалуйста!   Найти похожие ветки 

 
nick_vstu   (2002-01-23 03:03) [0]

Здраствуйте!
Подскажите пожалуйста как заставить мою програмку работать быстрее(или хотя бы просто работать).
Программа выполняет следущие действия:
1. Ищет все jpeg-файлы в укказаном каталоге;
2. Поочереди загружает их в TJpegImage;
3. Преобразовивает в BMP;
4. Маштабирует;
5. Додает в TImageList;
6. Потом все картинки отображаются в TDrawGrid
(В обработчике события OnDrawCell соответствуещаяся
картинка рисуется на канвасе TDrawGrid)
Проблема1: Картинки загружаются и ммаштабируются очень медленно.
Может этот процесс можно както ускорить.
Проблема2: Когда все уже загрузилось, и картинок больше 100,
начать прокручивать содержимое TDrawGrid, где-то на
середине программа выдает сообщение что системе
не хватает ресурсов.

Зарание благодарен.


 
Фэ   (2002-01-23 03:10) [1]

P-4, Athlon-XP (>1500)
>256M
Win2000
HDD 7200 rpm


 
nick_vstu   (2002-01-23 03:29) [2]

Извините что не в тот раздел, было два разных вопроса, задумался и написал оба в один раздел.


 
Hrul   (2002-02-13 17:05) [3]

Возможно, что у Вас в программе после преобразований не освобождается память. Точнее GDI - не возвращает ее после отрисовки. Попробуйте явным образом освобождать ее после преобразований.


 
nick_vstu   (2002-02-14 00:23) [4]

> Hrul
Вы имеете ввиду память которую занимает канвас?
Обясните пожалуйста что и как нужно освобождать.


 
Лёша   (2002-02-14 04:24) [5]

Проблема1: JpegImage.Scale позволяет "маштабировать" изображение еще до загрузки файла. Специально придуманно для предварительного просмотра большого количества jpg.
type TJPEGScale=(jsFullSize,jsHalf,jsQarter,jsEighth);

Проблема2: Не понятно откуда рисуется картинка на TDrawGrid.
Если из TImageList, то проблем быть не должно.


 
nick_vstu   (2002-02-16 01:35) [6]

2 Леша. Спасибо! Первую проблему - решили!

Осталась вторая.
Тот исходник пропал вместе с винтом :(
Пришлось написать новый, только вместо DrawGrid - ListBox
но нисчего - проблемы остались те же.
Вот иходник обеих процедур:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
b0,b1:TBitmap;
Rect:TRect;
begin
b0:=TBitmap.create;
b1:=TBitmap.Create;
For i:=0 to 100{FileListBox1.Items.Count-1} do
begin
FileListbox1.ItemIndex:=i mod 6 ;
b0.LoadFromFile(FileListBox1.FileName);
b1.Height:=50;
b1.Width:=50;
Rect.Top:=0; Rect.Left:=0; Rect.Right:=50; Rect.Bottom:=50;
b1.Canvas.StretchDraw(Rect,b0);
ImageList1.Add(b1,b1);
ListBox1.Items.Add(" ");
application.ProcessMessages;
end;
b1.FreeImage;
b0.FreeImage;
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var B:TBitmap;
begin
b:=TBitmap.create;
ImageList1.GetBitmap(Index,b);
ListBox1.Canvas.Draw(Rect.left+1,Rect.Top+1,b);
b.FreeImage;
end;

Я заметил что при непрерывном прокручивания ListBox не обрабатываются сообщения (программа подвисает) возможно проблемма именно в этом нужно както заставить их обработаться.
IMHO надо ловить сообщение которое посылается при прокручивании ListBox-a и запускать ProcessMesseges.
Если это так - то какое сообщение?



 
Лёша   (2002-02-17 03:31) [7]

FreeImage "очищает" дескриптор битмапа для дальнейшего использования. Если на данный дескриптор есть ссылки, то он дублируется. Используй: b.Free;


 
nick_vstu   (2002-02-20 03:12) [8]

2 Лёша
Поменял на Free но проблема не исчезла.
Может есть еще какие-нибудь предложения.



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

Форум: "Media";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-88853
Reals
2002-06-17 17:08
2002.06.27
Проблема при закачке нескольких файлов по протоколу HTTP


1-88926
DeMoN-777
2002-06-14 22:33
2002.06.27
F1


8-88969
Zhuka
2002-02-18 12:14
2002.06.27
Свой Popup над Flash???


1-88951
deymon
2002-06-15 20:24
2002.06.27
Извините за неточность...


3-88737
harismatik
2002-06-04 11:29
2002.06.27
Вопрос по DBGrid





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