Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.08.2011, 16:19
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию Сохранение BMP в собственном файле

Здравствуйте!!!
Требуется помощь в решении задачи!
Некоторое время назад, начал писать приложение, для ведения домашней видеотеки. Приложение читает данные из файла и запоминает их в список, далее отображает этот список в виде таблицы на форме, выполняются различные действия (сортировка, удаление поиск и т. д.) Все это реализовал, но захотел добавить изображение к каждой записи списка, и чтоб оно было параметром этой записи. Долго пытался, как то реализовать эту задачу, но получилось только так:

Загружаю изображение в Image считываю попиксельно Canvas и заношу в двумерный массив, который в свою очередь является элементом записи, потом это сохраняется в файл (в файле хранятся данные различных типов + массив цветов). При отображении выбранной, из таблицы записи, в image отображается массив который был считан из файла. Отображение реализовал в попиксельном считывание цвета из массива. Это все работает но крайне медленно, чтоб отобразить изображение размером 150х150 пикселей задержка в пол секунды(может чуть меньше), если начать быстро просматривать записи приложение повисает.

Пробовал сохранить все BMP изображение в свой файл, но не нашел Информации как это реализовать.

Пожалуйста подскажите в какую сторону копать, что почитать или можно как то по другому решить проблему!
Ответить с цитированием
  #2  
Старый 28.08.2011, 20:19
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Вот пример может поможет: 0001.rar
__________________
If end Then begin;
Ответить с цитированием
  #3  
Старый 28.08.2011, 21:19
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А просто Image.Picture.SaveToFile не помогает?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 28.08.2011, 23:45
Аватар для Pit-bull85
Pit-bull85 Pit-bull85 вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 8
Репутация: 10
По умолчанию

Копай в сторону Баз Данных. В них можно и записи хранить, и иконки, и при этом всё работает без задержек.
Ответить с цитированием
  #5  
Старый 29.08.2011, 11:44
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

Спасибо большое, за быстрый ответ! Это очень похоже на то, что мне нужно, покрайней мере пища для размышлений появилась!
Ответить с цитированием
  #6  
Старый 29.08.2011, 11:47
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
А просто Image.Picture.SaveToFile не помогает?
Спасибо за предложение, но:
Мне не просто нужно сохранить изображение в файл, а добавить к файлу, в котором уже есть данные, по типу базы данных.
Ответить с цитированием
  #7  
Старый 29.08.2011, 12:17
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pit-bull85
Копай в сторону Баз Данных. В них можно и записи хранить, и иконки, и при этом всё работает без задержек.
В том то и дело, что приложение должно быть без компонентов баз данных.
Ответить с цитированием
  #8  
Старый 29.08.2011, 13:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Можно и без готовых компонент БД, но это странное самограничение - отказаться от использования удобного инструмента.
Тогда делаете просто свою библиотеку картинок. Делается два файла, один содержит картинки, лучше их в JPG формате там хранить, а второй содержит информацию о начале данных картинки и их длине, можно еще описание каждой картинки туда вбухать, но это уже необязательно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 29.08.2011, 14:58
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Можно и без готовых компонент БД, но это странное самограничение - отказаться от использования удобного инструмента.
Тогда делаете просто свою библиотеку картинок. Делается два файла, один содержит картинки, лучше их в JPG формате там хранить, а второй содержит информацию о начале данных картинки и их длине, можно еще описание каждой картинки туда вбухать, но это уже необязательно.
Спасибо за совет!
Дело в том что я пишу Лабараторную работу по САОД, и мне необходимо ограничится от готовых решений и написать "свой велосипед". А идея впринципе в этом и заключалась, только картинки хранятся в одном файле с описанием! Все изображения имеют одинаковый размер! Просто я не знаю, как сохранять картинку (возможно в какой то своей структуре, которую нужно получить из имеющегося изображения) в файл, но это пол беды, потом это нужно считать из файла и привести обратно к JPG, BMP или ...


Цитата:
Сообщение от Страдалецъ
один содержит картинки

Как упаковать несколько картинок в один файл??
По этому поводу, что можно почитаь??
Ответить с цитированием
  #10  
Старый 29.08.2011, 21:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно сочинить весьма простой "велосипед". Изображения хранятся в одном подкаталоге, а текстовые в другом, с тем же названием. Выбираем изображение и проверяем подкаталог с текстом, если такой же файл найден, делаем нужные операции. Расширения у файлов, естественно свои.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 29.08.2011, 22:02
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

А использовать TFileStream как в примере не подходит?
__________________
If end Then begin;
Ответить с цитированием
  #12  
Старый 30.08.2011, 07:22
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

Цитата:
Сообщение от AND_REY
А использовать TFileStream как в примере не подходит?

Очень даже подходит, тока я пока не совсем разобрался, что я могу использовать в своем приложении. Как работает твой пример я понял. И возник вопрос, а как работать не с TFileStream, а с TMemoryStream или это не совсем то что мне нужно??? Просто не могу разобраться с этим классом и кажется ,что я "подхватил не то напровление".

Цитата:
Сообщение от angvelem
Можно сочинить весьма простой "велосипед". Изображения хранятся в одном подкаталоге, а текстовые в другом, с тем же названием. Выбираем изображение и проверяем подкаталог с текстом, если такой же файл найден, делаем нужные операции. Расширения у файлов, естественно свои.

Я уже много раз думал про это, есть еще куча вариантов, да и впринципе я могу уже приступить к рихтованию кода приложения, чтоб закончить, но просто уже стало интересно как же всетаки реализовать мою проблему. Я прекрасно понимаю, что мое - это далеко не оптимальное решение задачи, -но все же, не хочется отступать, ведь решение должно быть, и оно крутится гдето рядом, но ....
Ответить с цитированием
  #13  
Старый 30.08.2011, 07:51
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

Еще вопрос - в какой формат можно присвоить данные из TMemoryStream?
Это, чтоб можно было использовать его в моей записи, как то отредактировать и сохранить в файл.
Ответить с цитированием
  #14  
Старый 30.08.2011, 08:55
SergArmy SergArmy вне форума
Прохожий
 
Регистрация: 28.08.2011
Сообщения: 18
Репутация: 10
По умолчанию

По суте мне нужно в какую то переменную занести полное содержание файла картинки. Например если открыть изображение в текстовом редакторе получается огромное колличество символов - вот эти символы мне и надо дописать к моему файлу. Покрайней мере мне так кажеться...
Ответить с цитированием
  #15  
Старый 30.08.2011, 10:53
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Если файлы Bmp одинакового размера то можно ещё попробовать так обьявить структуру:
Код:
Const
 R = 100433; // Размер рис.
Type
 MyStrukt = Record // Наша структура для записи в свой файл
  S: String[32]; // имя рисунка
  n: Integer; // ещё чтото 
  // и т. д. скоко надо параметров к рисунку.
  Bmp: Array [0..R] of Byte; // массив с байтами рисунка.
 end;
Вот так считываем из структуры на Image нашу картинку
Код:
var
 Ms: TMemoryStream;
 Str: MyStrukt;
begin
 Ms:= TMemoryStream.Create;
 Ms.Write(Str.Bmp, R);
 Image1.Picture.Bitmap.LoadFromStream(Ms);
 Ms.Free;
end;
Так же массив из MyStrukt можно легко сохранить в файл и читать от туда.
Записать рис. в нашу структуру тоже легко. Просто переписываем побайтно из рис. в массив Bmp: Array [0..R] of Byte;
Дома буду соченю пример если непонятно а то щяс на работе.
__________________
If end Then begin;
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter