Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Слайд-шоу - проблема больших файлов   Найти похожие ветки 

 
seregka   (2005-03-03 09:59) [0]

Доброго времени суток!

Нужен Ваш совет. Пишу простейший просмотрщик картинок (только *.jpg) то типу АсиДуси (ACDSee).
Основная и единственная задача – слайд-шоу из n-картинок, отображающихся последовательно через 1 секунду в полноэкранном режиме.
Вся проблема в том, что картинки большого разрешения и, соответственно, размера (в среднем, 2032х1524, ~1mb) и когда я пытаюсь организовать слайд-шоу, то получается ерунда. В ACDSee картинки грузятся мгновенно, а у меня медленно и практически не задерживаются на экране, т.к. таймер открывает след.картинку.

Нашел процедуру:
procedure TForm1.FormCreate(Sender: TObject);
begin
 if Image1.Picture.Graphic is TJPEGImage then
 begin
   TJPEGImage(Image1.Picture.Graphic).DIBNeeded;
 end;
end;
, но она совсем не влияет на скорость открытия картинок.

Вот мои процедуры:

procedure TForm1.FormCreate(Sender: TObject);
begin
 if Image1.Picture.Graphic is TJPEGImage then
 begin
   TJPEGImage(Image1.Picture.Graphic).DIBNeeded;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 if not OpenPictureDialog1.Execute then
   exit;
 with OpenPictureDialog1 do
 begin
for i := 0 to Files.Count - 1 do
     ListBox1.Items.add(Files.Strings[i]);
q:= Files.Count – 1;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
image1.Picture.LoadFromFile(listbox1.Items.strings[k]);
if k=q then
begin
timer1.Enabled:=false;
k:=0;
end;
inc(k);
end;


 
WondeRu ©   (2005-03-03 10:49) [1]

ACDSee кеширует весь каталог с картинками при открытии! Поэтому советую загружать сразу несколько TJpegImage в одном потоке, а в другом выводить через StretchBlt


 
seregka   (2005-03-03 11:23) [2]

Примерчик, можно, пожалуйста. Я просто еще со stream не работал до этого


 
WondeRu ©   (2005-03-03 14:05) [3]

нужен не Stream, а TThread!


 
programania ©   (2005-03-03 18:04) [4]

>ACDSee кеширует весь каталог с картинками при открытии

Она кеширует только миниатюры в свою базу
Для полного размера 9mb на картинку никакой памяти не хватит.

Чтоб выводить на экран мгновенно, нужно
ввод и масштабирование делать в bitmap,
а на экран выводить canvas.draw по таймеру,
если загрузка новой закончена, а если нет
а время пришло, можно вывести старую,
перевернув по горизонтали, чтоб создать видимость.
В том же таймере после вывода на экран нужно запускать
загрузку следущей, тогда никаких потоков не надо
и 1 сек вполне хватит для таких файлов,
а если нужно еще быстрее укажите
JPEGImage.Scale:=jsHalfjs или Quarter, jsEighth
для больших картинок, все равно
при такой скорости качество не разглядеть.


 
Cosinus ©   (2005-03-05 17:12) [5]

ScanLine можно использовать. Тогда совсем хорошо будет.


 
AlterEgo of WondeRu ©   (2005-03-05 20:04) [6]

Cosinus ©   (05.03.05 17:12) [5]
ScanLine можно использовать. Тогда совсем хорошо будет.


кому хорошо будет?


 
марсианин ©   (2005-03-07 22:17) [7]

ACDSee все-таки кеширует.. правда не все сразу.. а по одной-две загружает заранее и, когда приходит время просмотра, картинка уже загружена..


 
Cosinus ©   (2005-03-10 10:18) [8]


> AlterEgo of WondeRu ©   (05.03.05 20:04) [6]
По скорости.


 
WondeRu ©   (2005-03-11 08:29) [9]

Cosinus ©   (10.03.05 10:18) [8]
По скорости.


с чего ты взял??!!!! Речь вообще о другом!!!


 
Cosinus ©   (2005-03-11 12:12) [10]


> WondeRu ©   (11.03.05 08:29) [9]
Ой... Простите. Действительно не в ту эху :)))


 
DeadMeat ©   (2005-03-11 13:23) [11]

Попробуй через GDI+ или DX.. Или даже OGL.
Короче привязать к аппаратному ускорению (хотя насчет GDI+ не уверен)..
А загрузку делать (как уже сказали) кэшируемой.. Т.е. по две сразу, а потом каждую следующую...


 
WondeRu ©   (2005-03-11 13:45) [12]

DeadMeat ©   (11.03.05 13:23) [11]
соглашусь с Вами)



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

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.04 c
9-1112329942
Strech
2005-04-01 08:32
2005.07.11
Физика твердого тела и борьба с дискретностью


5-1087801370
GrayFace
2004-06-21 11:02
2005.07.11
Как сделать один компонент частью другого?


3-1117199951
ryds
2005-05-27 17:19
2005.07.11
Слияние двух баз данных InterBase


1-1118896533
Layner
2005-06-16 08:35
2005.07.11
Как автоматизировать процесс создания однотипных форм


14-1118834936
DVYdm
2005-06-15 15:28
2005.07.11
настройка Apache Server





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