Текущий архив: 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.039 c