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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2008, 17:02   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Как ускорить загрузку битмапа в tImage

Как мне ускорить загрузку и отображение картинок в tImage?
Картинки с высоким качаством загружаються долго!
Altera вне форума Ответить с цитированием
Старый 23.03.2008, 19:20   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Прежде чем что-то советовать, можно узнать для чего?
Что программа делает?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.03.2008, 19:54   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Что программа делает?
Программа просмотра изображений.
По сравнению со виндовской проги просмотра картинок, моя перелистывает картинки (высокого разрешения) в 1.5 - 2 раза медленей. Вот и хочу исправить...
Altera вне форума Ответить с цитированием
Старый 23.03.2008, 20:15   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Телепатические возможности закончились ещё вчера....
Где код?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 23.03.2008, 20:28   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Это юнит! Все переменные в другом юните (ниже)...
Код:
unit open_select_file;

interface

procedure{ создание списка файлов }file_list_create(const s: string);
procedure{ показать рис. }show_image(const s: string);
procedure{ предыдущий / предыдущий рис. }np_image(const b: byte);
procedure{ создаём информацию о файле }f_inform_create(const s: string);
procedure{ октивные / не октивные кнопки  2 }eneble_buttons2(const b: boolean);
procedure{ октивные / не октивные кнопки  1 }eneble_buttons1(const b: boolean);
procedure{ проверка количества строк }count_test;
procedure{ вывод информации на панель }inform_out(const s: string);

implementation

uses
  vars, windows, SysUtils, Classes, graphics, find_form, main_form;

procedure{ проверка количества строк }count_test;
begin
   if l_count = 0 then
   begin
      eneble_buttons1(true);
      exit;
   end
   else
   eneble_buttons1(false);

   if l_count > 0 then
   begin
      eneble_buttons2(true);
      eneble_buttons1(true);
   end
   else
   begin
      eneble_buttons2(false);
      eneble_buttons1(false);
   end;
end;

procedure{ октивные / не октивные кнопки  2 }eneble_buttons2(const b: boolean);
begin
   with aMain_form do
   begin
      p_button.Enabled := b;
      n_button.Enabled := b;
      find_button.Enabled := b;
   end;
end;

procedure{ октивные / не октивные кнопки  1 }eneble_buttons1(const b: boolean);
begin
   with aMain_form do
   begin
      delete_button.Enabled := b;
      edit_button.Enabled := b;
   end;
end;

procedure{ показать рис. }show_image(const s: string);
begin
   if not fileExists(s) then
   begin
      file_list_create(f_path);
      if l_count > 0 then
      begin
         l_pos := 0;
         np_image(0);
      end;
      if l_count = 0 then
      begin
         aMain_form.main_panel.Caption := 'Нет изображения';
         aMain_form.main_image.Visible := false;
      end;
      exit;
   end;
   aMain_form.main_panel.Caption := '';
   aMain_form.main_image.Visible := true;
   f_inform_create(s);
   aMain_form.Caption := 'Picture reader - '+f_name;
   try
   aMain_form.main_image.Picture.LoadFromFile(s);
   except
      inform_out(f_name+' - ошибка, не верный формат!');
   end;
end;

procedure{ следующий / предыдущий рис. }np_image(const b: byte);
procedure{ следующий }n;
begin
   if l_pos = l_count then l_pos := 0 else l_pos := l_pos + 1;
   show_image(f_path+f_list.Strings[l_pos]);
end;
procedure{ предыдущий }p;
begin
   if l_pos = 0 then l_pos := l_count else l_pos := l_pos - 1;
   show_image(f_path+f_list.Strings[l_pos]);
end;
begin
   case b of
   0: n;
   1: p;
   end;
end;

procedure{ создание списка файлов }file_list_create(const s: string);
var
sr: tSearchRec;
begin
   f_list.Free;
   f_list := tStringList.Create;
   if findFirst(s+'*.jpg', faAnyFile, sr) = 0 then
   begin
      f_list.add(extractFileName(sr.Name));
      while findNext(sr) = 0 do f_list.add(extractFileName(sr.Name));
   end;
   if findFirst(s+'*.bmp', faAnyFile, sr) = 0 then
   begin
      f_list.add(extractFileName(sr.Name));
      while findNext(sr) = 0 do f_list.add(extractFileName(sr.Name));
   end;
   if findFirst(s+'*.ico', faAnyFile, sr) = 0 then
   begin
      f_list.add(extractFileName(sr.Name));
      while findNext(sr) = 0 do f_list.add(extractFileName(sr.Name));
   end;
   if findFirst(s+'*.jpeg', faAnyFile, sr) = 0 then
   begin
      f_list.add(extractFileName(sr.Name));
      while findNext(sr) = 0 do f_list.add(extractFileName(sr.Name));
   end;
   if findFirst(s+'*.wmf', faAnyFile, sr) = 0 then
   begin
      f_list.add(extractFileName(sr.Name));
      while findNext(sr) = 0 do f_list.add(extractFileName(sr.Name));
   end;
   if findFirst(s+'*.emf', faAnyFile, sr) = 0 then
   begin
      f_list.add(extractFileName(sr.Name));
      while findNext(sr) = 0 do f_list.add(extractFileName(sr.Name));
   end;
   findClose(sr);
   f_list.Sort;
   l_count := f_list.count - 1;
   count_test;
   with aFind_form do
   begin
      file_list.Items := f_list;
      direct_out.Text := f_path;
   end;
end;

procedure{ создаём информацию о файле }f_inform_create(const s: string);
begin
   f_name := extractFileName(s);
   f_way := s;
   f_ext := extractFileExt(s);
end;

procedure{ вывод информации на панель }inform_out(const s: string);
begin
   aMain_form.main_image.Visible := false;
   aMain_form.Caption := 'Picture reader - ' + s;
   aMain_form.main_panel.Caption := s;
end;

end.
Altera вне форума Ответить с цитированием
Старый 23.03.2008, 20:28   #6
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Код:
unit vars;

interface


uses
  windows, SysUtils, Classes, registry, Graphics;

type
r = record
s: string[255];
end;

var
q: r;
appy: boolean = false;
fon_color: integer;
f_list: tStringList;
f_rec: tSearchRec;
f_way,
f_path,
f_name,
f_ext: string;
l_count, l_pos: integer;
iniFile: tRegIniFile;
r_g_b: integer;
multi_start, close_after_select, status_bar_show: boolean;
implementation

end.
Altera вне форума Ответить с цитированием
Старый 23.03.2008, 20:34   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Вот и хочу исправить...
Для этого может понадобится углубленное изучение работы с графикой, возможно придется полностью перейти на WinAPI.
Если кроме bmp интересуют другие форматы, нужно будет работать с профессиональными библиотеками.

Как первый шаг в этом направлении нужно отказаться от TImage.

Цитата:
моя перелистывает картинки (высокого разрешения) в 1.5 - 2 раза медленей
В BMP или в других форматах? Высокое это какое например в цифрах разрешение?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 23.03.2008 в 20:45.
mutabor вне форума Ответить с цитированием
Старый 23.03.2008, 20:42   #8
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Как первый шаг в этом направлении нужно отказаться от TImage.
Ну я это сразу понял!
Во-первых: некотрые bmp форматы имедж не берёт!
Во-вторых: имедж не берёт гиф...!

А может для этого компонент есть? Если я не ошибаюсь, как я помню, компенент просмотракартинок в delphi для .net читал *.gif ...
Altera вне форума Ответить с цитированием
Старый 23.03.2008, 22:22   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Есть сторонние компоненты и для GIF и для PNG. Они так и называются GIFImage, PNGImage и вроде они на базе стандартного Имиджа.
Имхо лучше подключать хорошие библиотеки, а отображение в программе делать самому, без имиджа. И вообще надо отучаться от привычки использовать громоздкие компоненты для того чтобы воспользоваться какой-то его побочной функцией.

Кстати, для информации: GIF и JPEG закрытые форматы, и на их использование нужна лицензия. PNG - Open Source. BMP - для винды от фирмы Микросос.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 24.03.2008, 11:24   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

* На использование в коммерческих целях нужна лицензия

Пакет GDIplus работает с множеством форматов гараздо быстрее чем дельфийский TImage

ЗЫ: XnView рулит =)
пыщь
JTG вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ускорить работу с сетевой БД Ramires БД в Delphi 3 21.08.2008 12:16
запись битмапа в файл SunKnight Общие вопросы Delphi 8 09.06.2008 08:56
Отключить загрузку всех картинок в WebBrowser SHEI'TI Общие вопросы Delphi 6 31.01.2008 13:23
Как ускорить выполнение макросов tat-besidovska Microsoft Office Excel 1 22.01.2008 12:12
Сжатие битмапа Rapid Мультимедиа в Delphi 7 08.12.2007 16:38