Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 104
MS Access

Загрузка изображений

28.12.2023, 11:53. Показов 1166. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста чем сможете. Есть база данных acsess. Есть таблицы Exponat м Images. Один экспонат имеет много изображении. Изображение загружаю через OpenDialog связывая по id и exponatid (таблица Images). А изображений каждого экспоната показываю при клике dbgrid в panel. Теперь есть одна большая проблема:-(. Изображений долго загружается в Panel. Как то можно ли решить эту проблему. Заренее большое всем спасибо
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure TShowExponatFrm.DBGrid1CellClick(Column: TColumn);
begin
  ClearImageList;
  DisplayImagesOnPanel;
end;
procedure TShowExponatFrm.DisplayImagesOnPanel;
var
  ImagePaths: TStringList;
  I: Integer;
  Image: TImage;
  CurrentLeft, CurrentTop: Integer;
  ImageWidth, ImageHeight: Integer;
begin
  ClearImageList;
  ImagePaths := TStringList.Create;
  try
    GlavFrm.ADOQuery3.Filter := 'exponatid = ' + GlavFrm.ADOQuery1.FieldByName('id').AsInteger.ToString;
    GlavFrm.ADOQuery3.Filtered := True;
 
    while not GlavFrm.ADOQuery3.Eof do
    begin
      ImagePaths.Add(GlavFrm.ADOQuery3.FieldByName('photo_path').AsString);
      GlavFrm.ADOQuery3.Next;
    end;
 
    GlavFrm.ADOQuery3.Filtered := False;
 
    ImageWidth := 100;
    ImageHeight := 100;
 
    CurrentLeft := 10;
    CurrentTop := 20;
 
    for I := 0 to ImagePaths.Count - 1 do
    begin
      Image := TImage.Create(Panel6);
      Image.Parent := Panel6;
      Image.Left := CurrentLeft;
      Image.Top := CurrentTop;
      Image.Width := ImageWidth;
      Image.Height := ImageHeight;
      Image.Proportional := False;
      Image.Stretch := True;
 
      // Задаем Tag как индекс изображения
      Image.Tag := I;
 
      Image.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + ImagePaths[I]);
 
      if CurrentLeft + ImageWidth + 10 > Panel6.Width then
      begin
        CurrentLeft := 10;
        CurrentTop := CurrentTop + ImageHeight + 10;
      end
      else
      begin
        CurrentLeft := CurrentLeft + ImageWidth + 10;
      end;
      ImageList.Add(Image);
    end;
  finally
    ImagePaths.Free;
  end;
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2023, 11:53
Ответы с готовыми решениями:

Загрузка/Отображение изображений в БД
Имеем: - таблица №1 (Images с полями: ID, IMG_LINK), в которой храняться линки на картинки - таблица №2 (Person с полями: ID,...

Загрузка Изображений В Image
Привет, друзья:)Есть такая проблема: идет сохранение изображения , созданого в графическом редакторе, созданым мной (с TImage). Проблема...

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

16
Модератор
 Аватар для D1973
9912 / 6449 / 2455
Регистрация: 21.01.2014
Сообщений: 27,377
Записей в блоге: 3
28.12.2023, 12:17
Цитата Сообщение от Abikon Посмотреть сообщение
Как то можно ли решить эту проблему.
Не хранить изображения в базе.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,659
Записей в блоге: 21
28.12.2023, 13:29
в приведенном коде так и написано

но загрузка с диска тоже не бесплатная

хочется теперь узнать - а "долго" - это сколько конкретно?
вряд ли у вас два десятка картинок грузятся с диска?
а если 2-3, то даже на обычном HDD это не должно быть хоть какой-то проблемой
0
 Аватар для Beltar
820 / 435 / 38
Регистрация: 05.05.2022
Сообщений: 2,996
28.12.2023, 14:50
Долго - это сколько? С винта jpg размером мегов в 5 будет загружаться заметное время даже в программе-просмотровщике, при этом они могут визуально "ускорять" загрузку, сначала грузя в грубом виде, а потом нормально сглаживая.

У меня есть подозрение, что там просто большие файлы, которые грузятся в превью 100х100. Тогда надо делать превьюшки мелкие, как оно везде делается.

В общем пишите какие файлы, сколько их. Как время работы соотносится с временем работы прог, вроде Fast Stone ImageViewer или ACDSee (если она жива).
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 104
28.12.2023, 17:23  [ТС]
Разрешение фотографии 1920*1100. Размер файла 1 мб. В каждом экспонате по 10 фотографий максимум. До загрузки всех фотографий ушло где то 2 минуты (это только когда выбираю один экспонат). При этом программа зависает до загрузки всех фотографий.
0
 Аватар для Beltar
820 / 435 / 38
Регистрация: 05.05.2022
Сообщений: 2,996
28.12.2023, 18:19
Тогда надо подключать юнит Diagnostics и использовать TStopwatch для замеров, где именно тормозит. Ну или хотя бы GetTickCount, при таком времени загрузки ее точность достаточна.

Неплохо бы еще проверить линейность времени загрузки от количества данных. Вдруг где-то квадратичная зависимость есть.

Но мне уже не нравится, что используется фильтр. Фильтр - это хорошая штука для быстрой фильтрации уже загруженных небольших наборов данных, но накладывать его надо уже поверх выбранного Select'ом с условием.
0
184 / 37 / 8
Регистрация: 14.04.2019
Сообщений: 238
28.12.2023, 21:22
Вообще-то мне кажется, что TPanel обычно используется в других целях
Попробуйте просто один TImage на форме. Будет тормозить? А если 10 раз подряд то же изображение грузить?
0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 104
28.12.2023, 21:50  [ТС]
Тогда надо подключать юнит Diagnostics и использовать TStopwatch для замеров, где именно тормозит. Ну или хотя бы GetTickCount, при таком времени загрузки ее точность достаточна.

Неплохо бы еще проверить линейность времени загрузки от количества данных. Вдруг где-то квадратичная зависимость есть.
Я не такой знаток. Если честно нечего не понял что все это значит

Добавлено через 2 минуты
Попробуйте просто один TImage на форме. Будет тормозить? А если 10 раз подряд то же изображение грузить? 1 фото с размером 1,1 мб загружается быстро. А если фото с таким же размером 7 шт тогда уже надо ждать где то секундов 30.
0
 Аватар для Beltar
820 / 435 / 38
Регистрация: 05.05.2022
Сообщений: 2,996
28.12.2023, 22:40
Измерение времени выполнения участков кода. GetTickCount возвращает число миллисекунд с запуска компа, ее точность 16 мс. Для данной задачи достаточно.

Delphi
1
2
3
t:=GetTickCount;
DoSomething;
dT:=GetTickCount-T;//очевидно же
TStopwatch поточнее. Как с ней работать все есть в справке.

Цитата Сообщение от Abikon Посмотреть сообщение
А если фото с таким же размером 7 шт тогда уже надо ждать где то секундов 30.
Если при увеличении до 10 шт время 2 минуты, то это уже непропорциональный рост, и похоже на квадратичную, или иную нелинейную зависимость.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,659
Записей в блоге: 21
28.12.2023, 23:36
да ну не верю я 10 мб = 2минуты ?
да ну неее...
это значит цикл в цикле в цикле скорее всего где-то у вас
а еще не удивлюсь если к этому GlavFrm.ADOQuery3. еще и сам грид подключен
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
29.12.2023, 13:45
Предлагаю начать с малого засунть ShowMeesage сюда:
Delphi
1
2
3
4
5
while not GlavFrm.ADOQuery3.Eof do
    begin
      ImagePaths.Add(GlavFrm.ADOQuery3.FieldByName('photo_path').AsString);
      GlavFrm.ADOQuery3.Next;
    end;
Потом сюда:
Delphi
1
2
3
 for I := 0 to ImagePaths.Count - 1 do
    begin
      Image := TImage.Create(Panel6);
B позырить скольок раз оно будет выведено.
Если 1 и соответвенно сколлько фоток то реально искать проблему в загрузке картинок...
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,659
Записей в блоге: 21
29.12.2023, 14:01
чувствую уверенный стиль php и бейсика))
а вот в делфи есть дебаггер и можно вместо showMessage поставить breakpoint
https://habrahabr.ru/post/178007/
0
 Аватар для Beltar
820 / 435 / 38
Регистрация: 05.05.2022
Сообщений: 2,996
29.12.2023, 14:21
А кто-то меня еще лечил, что не надо использовать цикл до Query.RecordCount-1.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,659
Записей в блоге: 21
29.12.2023, 16:05
дык я )
0
 Аватар для Beltar
820 / 435 / 38
Регистрация: 05.05.2022
Сообщений: 2,996
10.01.2024, 15:06
А я тут в силу собственного долбодятелства нарвался на ситуацию, когда у меня показ картинки был в AfterScroll датасета, при этом у меня не хватило мозгов понять сразу, при каких еще условиях AfterScroll может срабатывать, ну так штук 80 вызовов на небольшом наборе данных, а т. к. у меня есть сортировка на датасете, то чтобы она корректно работала, нужно пройти по нему и посчитать вычислимые\лукап поля (для нескольких десятков-сотен строк это фигня вопрос) заранее. Пришлось добавлять проверку на нужность вывода картинки в AfterScroll.

И у ТСа может быть что-то похожее.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,659
Записей в блоге: 21
10.01.2024, 16:50
я для таких случаев использую модель отложенного показа
запускаю таймер например на 500 мсек, картинка будет выведена (или любое другое действие сработать) только в обработчике таймера
если за это время произойдет новый скролл, то таймер каждый раз перезапускается
если не произойдет, то через 500 мсек картинка будет выведена и таймер отключен
1
Модератор
4134 / 2349 / 807
Регистрация: 15.11.2015
Сообщений: 9,378
11.01.2024, 09:43
Я делал таймер на 500 мс, но не стал его перезапускать при каждом изменении. Пи изменении настроек делаю Timer.Enabled := true, тогда, если он уже запущен, то ничего не происходит. И каждые 500 мс изображение обновляется, даже если без остановки крутить настройки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2024, 09:43
Помогаю со студенческими работами здесь

Загрузка изображений в оперативную память
подскажите возможно ли в делфи загрузить изображение в переменную чтобы потом можно было его использовать (а то каждый раз читать...

Загрузка изображений в файл по ссылке
Нужно сохранить картинку к примеру с http://steamcommunity.com/app/10/header.jpg сразу в файл (буду использовать многопоточность для...

Загрузка изображений из каталога в ImageList
Задача: загрузить изображения из папки в ImageList для дальнейшей работы с ним. Я тут нашел свойства и методы которыми владеет этот...

Загрузка изображений из базы данных
К примеру у меня есть несколько форм TImage. Как можно подгрузить изображения к примеру из ini файла, если в нем будет указан путь к...

Загрузка, изменение и сохранение изображений
Доброго всем дня. Пишу в lazarus программу, не вдаваясь в подробности - требуется выбрать изображение, произвести над ним некоторые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru