Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2007, 06:33   #1
vovan_evv
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 10
По умолчанию Загрузка бмп изображений

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

Пытаюсь сделать анимацию на главной форме проекта, которая отображается на весь экран, кое-как заствил анимацию не мерцать, но загрузка изображений происходит очень медленно. Даже без искусственных задержек смена кадров происходит минимум через пол секунды . картинки загружаю стандартным способом - bmp.LoadFromFile. Размер изображений разный от 1 мб до 2мб. Пытался уменьшить размеры изображений теряется качество. Можно ли каким-либо образом убыстрить загрузку изображений?
Может вообще отказаться от бмп и перейти jpeg, тогда как в делфи работать с изображениями формата jpeg?
vovan_evv вне форума Ответить с цитированием
Старый 22.10.2007, 07:53   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
Восклицание Модуль JPEG

Используй модуль JPEG, он входит в комплект поставки Delphi. Модуль позволяет работать с изображениями в формате JPEG.

Пример открытия файла JPEG
Код:
uses Jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
JpegIm: TJpegImage;
bm: TBitMap;
begin
if OpenDialog1.Execute = false then Exit;
bm := TBitMap.Create;
JpegIm := TJpegImage.Create;
JpegIm.LoadFromFile(OpenDialog1.FileName);
bm.Assign(JpegIm);
Form1.Canvas.Draw(0, 0, bm);
bm.Destroy;
JpegIm.Destroy;
end;
Как подгружать JPG-картинки, но чтобы они быстро отображались
Данный код заставляет явно и сразу декодировать jpeg, вместо того, чтобы делать это при отображении картинки:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
if Image1.Picture.Graphic is TJPEGImage then
begin
   TJPEGImage(Image1.Picture.Graphic).DIBNeeded;
end;
end;
Нет невыполнимых задач - есть неосуществимые условия их выполнения.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 22.10.2007, 09:38   #3
vovan_evv
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 10
По умолчанию

Большое спасибо!
vovan_evv вне форума Ответить с цитированием
Старый 24.10.2007, 03:47   #4
vovan_evv
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 10
По умолчанию Попробовал

Попробовал оба варианта:
1. убыстрение смены кадров наблюдалось но не такое сильное.
2. наблюдалось значительное убыстрение, но... показывает только последний кадр когда уже цикл уже закончился. Пробовал увеличить задержку, бесполезно то же самое.
Подскажите в чем может быть проблема.

Код:
 procedure TForm1.Button1Click(Sender: TObject);
begin
i:=0;
while(i<=n)do
 begin
  Image1.visible:=false;
  Image1.Picture.LoadFromFile(f[i]);
  if Image1.Picture.Graphic is TJPEGImage then
  begin
    (Image1.Picture.Graphic as TJPEGImage).DIBNeeded;
  end;
  Image1.Update;
  Image1.Visible=true;
  i:=i+1;  
 end;
end;
f и i - глобальные переменные, f - массив строк, содержащий имена фалов.
vovan_evv вне форума Ответить с цитированием
Старый 24.10.2007, 06:40   #5
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Ой. И ещё раз ой. В задаче поставлено ЧЁТКО и НЕОБХОДИМО условие каждый раз грузить из файла? Ведь можно сделать n глобальных переменных TImage, загрузить в них один раз и пользоваться ими. (Это без всяких оптимизаций уже даст прирост неплохой).
Maslan вне форума Ответить с цитированием
Старый 24.10.2007, 07:40   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вова, скажи а почему б не прокручивать видео вместо "анимации"?
Или ты хочеш сделать типа слайд-шоу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2007, 16:12   #7
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Есть компоненты для Delphi которые проигрывают GIF'ы. Также можешь загрузить файлы в ImageList и потом оттуда в Image
Hollander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трансформация изображений Артэс Свободное общение 27 14.12.2009 10:27
Загрузка изображений с http One.Love Общие вопросы Delphi 1 10.03.2008 08:36
Фильтрация изображений varvara16 Мультимедиа в Delphi 2 16.12.2007 10:20
История изображений AidarBik Общие вопросы Delphi 5 07.11.2007 15:46
Смена изображений KORT Общие вопросы Delphi 3 09.07.2007 11:06