|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сохранение BMP в собственном файле
Здравствуйте!!!
Требуется помощь в решении задачи! Некоторое время назад, начал писать приложение, для ведения домашней видеотеки. Приложение читает данные из файла и запоминает их в список, далее отображает этот список в виде таблицы на форме, выполняются различные действия (сортировка, удаление поиск и т. д.) Все это реализовал, но захотел добавить изображение к каждой записи списка, и чтоб оно было параметром этой записи. Долго пытался, как то реализовать эту задачу, но получилось только так: Загружаю изображение в Image считываю попиксельно Canvas и заношу в двумерный массив, который в свою очередь является элементом записи, потом это сохраняется в файл (в файле хранятся данные различных типов + массив цветов). При отображении выбранной, из таблицы записи, в image отображается массив который был считан из файла. Отображение реализовал в попиксельном считывание цвета из массива. Это все работает но крайне медленно, чтоб отобразить изображение размером 150х150 пикселей задержка в пол секунды(может чуть меньше), если начать быстро просматривать записи приложение повисает. Пробовал сохранить все BMP изображение в свой файл, но не нашел Информации как это реализовать. Пожалуйста подскажите в какую сторону копать, что почитать или можно как то по другому решить проблему! |
#3
|
||||
|
||||
А просто Image.Picture.SaveToFile не помогает?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
||||
|
||||
Копай в сторону Баз Данных. В них можно и записи хранить, и иконки, и при этом всё работает без задержек.
|
#5
|
|||
|
|||
Спасибо большое, за быстрый ответ! Это очень похоже на то, что мне нужно, покрайней мере пища для размышлений появилась!
|
#6
|
|||
|
|||
Цитата:
Мне не просто нужно сохранить изображение в файл, а добавить к файлу, в котором уже есть данные, по типу базы данных. |
#7
|
|||
|
|||
Цитата:
|
#8
|
||||
|
||||
Можно и без готовых компонент БД, но это странное самограничение - отказаться от использования удобного инструмента.
Тогда делаете просто свою библиотеку картинок. Делается два файла, один содержит картинки, лучше их в JPG формате там хранить, а второй содержит информацию о начале данных картинки и их длине, можно еще описание каждой картинки туда вбухать, но это уже необязательно. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
Цитата:
Дело в том что я пишу Лабараторную работу по САОД, и мне необходимо ограничится от готовых решений и написать "свой велосипед". А идея впринципе в этом и заключалась, только картинки хранятся в одном файле с описанием! Все изображения имеют одинаковый размер! Просто я не знаю, как сохранять картинку (возможно в какой то своей структуре, которую нужно получить из имеющегося изображения) в файл, но это пол беды, потом это нужно считать из файла и привести обратно к JPG, BMP или ... Цитата:
Как упаковать несколько картинок в один файл?? По этому поводу, что можно почитаь?? |
#10
|
||||
|
||||
Можно сочинить весьма простой "велосипед". Изображения хранятся в одном подкаталоге, а текстовые в другом, с тем же названием. Выбираем изображение и проверяем подкаталог с текстом, если такой же файл найден, делаем нужные операции. Расширения у файлов, естественно свои.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
||||
|
||||
А использовать TFileStream как в примере не подходит?
If end Then begin; |
#12
|
|||
|
|||
Цитата:
Очень даже подходит, тока я пока не совсем разобрался, что я могу использовать в своем приложении. Как работает твой пример я понял. И возник вопрос, а как работать не с TFileStream, а с TMemoryStream или это не совсем то что мне нужно??? Просто не могу разобраться с этим классом и кажется ,что я "подхватил не то напровление". Цитата:
Я уже много раз думал про это, есть еще куча вариантов, да и впринципе я могу уже приступить к рихтованию кода приложения, чтоб закончить, но просто уже стало интересно как же всетаки реализовать мою проблему. Я прекрасно понимаю, что мое - это далеко не оптимальное решение задачи, -но все же, не хочется отступать, ведь решение должно быть, и оно крутится гдето рядом, но .... |
#13
|
|||
|
|||
Еще вопрос - в какой формат можно присвоить данные из TMemoryStream?
Это, чтоб можно было использовать его в моей записи, как то отредактировать и сохранить в файл. |
#14
|
|||
|
|||
По суте мне нужно в какую то переменную занести полное содержание файла картинки. Например если открыть изображение в текстовом редакторе получается огромное колличество символов - вот эти символы мне и надо дописать к моему файлу. Покрайней мере мне так кажеться...
|
#15
|
||||
|
||||
Если файлы Bmp одинакового размера то можно ещё попробовать так обьявить структуру:
Код:
Const R = 100433; // Размер рис. Type MyStrukt = Record // Наша структура для записи в свой файл S: String[32]; // имя рисунка n: Integer; // ещё чтото // и т. д. скоко надо параметров к рисунку. Bmp: Array [0..R] of Byte; // массив с байтами рисунка. end; Код:
var Ms: TMemoryStream; Str: MyStrukt; begin Ms:= TMemoryStream.Create; Ms.Write(Str.Bmp, R); Image1.Picture.Bitmap.LoadFromStream(Ms); Ms.Free; end; Записать рис. в нашу структуру тоже легко. Просто переписываем побайтно из рис. в массив Bmp: Array [0..R] of Byte; Дома буду соченю пример если непонятно а то щяс на работе. If end Then begin; |