![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Згарузка графики. [D7, WinXP]
Wood © (2004-09-24 06:16:00)Good day!
Помогите, пожалуйста.
Пытаюсь сделать прогу, типа фотальбома.
Вопрос в чем: как ускорить загрузку JPEG'ов большого формата, например, более 2000 п. в превью небольшого размера, например 60х60.
К примеру, переменная Mjpeg: TJPEGImage, mybit: array [0..100] of TBitmap;
{ Mjpeg.LoadFromFile('name.jpg');
with TJPEGImage(Mjpeg) do
begin
Performance := TJPEGPerformance(jpBestSpeed);
Scale := TJPEGScale(jsEighth);
Smoothing:=true;
end;
// mybit[i].Canvas.StretchDraw(rect(0,0,60,60),Mjpeg);
except
Mjpeg.Free;
Application.Terminate;
exit;
end; }
При большом количестве файлов в каталоге все происходит долго.
Есть ли способ улучшить производительность? И способ вывода
какой-нибудь индикации процесса?
Спасибо.
[lamer]Barmaglot (2004-09-24 10:41:00) [1]to Wood (24.09.04 10:36) [8]
Прекратить до момента пока ты почитаешь форматы... наверное да, а то ты говоришь глупость за глупостью. В винде выводить на экран можно только bmp... Все остальные форматы перед выводом переводятся в этот формат (часто скрыто для тебя)
Wood (2004-09-24 10:36:00) [2]Barmaglot[7]
А как же разные использования Stream, memory и т.п. в случаях загрузки JPEG'ов? Ведь в моем случае в ВМР ничего не переводится, в принципе, происходит все быстро, только, когда попадется большой файл JPEG...
Но намек понял, дискуссию нужно прекратить?
[lamer]Barmaglot (2004-09-24 10:12:00) [3]to Wood (24.09.04 10:01) [6]
Так не получится, грубо говоря JPeg - это архив, для того чтобы сделать стретчдрав, тебе надо загрузить файл, разжать его, перевести его в BMP и только после этого уменьшать размер... Оно тебе надо? Опять повторюсь, смотри формат файла, если разберешься все будет понятно, если нет... Юзай стандартный компонент и не морочь другим голову...
Wood (2004-09-24 10:01:00) [4]TUser [5]
спасибо, см. пост [0]
Performance := TJPEGPerformance(jpBestSpeed);
приоритет скорости над качеством.
Я имею ввиду, может сам способ уменьшения картинки перед выводом на экран
mybit[i].Canvas.StretchDraw(rect(0,0,60,60),Mjpeg);
не верен?
TUser (2004-09-24 09:57:00) [5]
> Посмотри как реализован алгоритм в ACDC
А разве у него открыты исходники?
Посмотри также св-во
propertyPerformance: TJPEGPerformance;
у TJPegImage. Не уверен, но может помочь.
Wood (2004-09-24 09:35:00) [6]Barmaglot [3]
Спасибо, посмотрю. Хотя велосипед тут не причем. Небольшие файлы загружаются быстро.
[lamer]Barmaglot (2004-09-24 09:17:00) [7]Не выдумывай велосипед, в JPeg обычно сохраняется готовый предпросмотр, смотри бинарный формат файлов здесь: www.wotsit.org правда реализовывать придется ручками :-)
Wood (2004-09-24 08:29:00) [8]>КаПиБаРа[1]
Спасибо.
На счет Free и Finally - это я, вообщем.
Смысл загрузки, я понял, создать поток? У меня замысел, сначала загрузить все JPEG, а потом их показывать, т.е. важна скорость загрузки их в переменные, типа Mjpeg см.[0] и, затем, перевода в Bitmap, или в(на) какой-нибудь Image, допустим. Приведенные, выше методы и свойства для JPEG не очень ускоряют процесс.
КаПиБаРа (2004-09-24 07:32:00) [9]1. В except Free не делаютъ. Помести его в finally
2. При возникновении ошибки делать Application.Terminate как то жестоко :)
3. Посмотри как реализован алгоритм в ACDC. Загрузка изображений в отдельном потооке. Если на экране должны быть отображены изображения которые не загружены вместо них выводится пустое изображения и изменяется порядок загрузки. В первую очередь загружаются изображения которые д.б. отображены. Затем продолжается закрузка остальных изображений. Прогрес загрузки показать просто кол-во загруженных изображений / общее кол-во изображений.
======================================
Прежде чем о чем-то мечтать - подумай,
а вдруг сбудется.
======================================