Как я могу хранить множество изображений в одном файле для приложения WinForms? - PullRequest
1 голос
/ 06 мая 2009

У меня есть приложение .net WinForms 2.0, которое в настоящее время имеет библиотеку изображений, содержащую около 3000 изображений. В настоящее время я использую SQLite и храню все изображения в виде больших двоичных объектов с уникальными идентификаторами, которые упрощают поиск.

Преимущество этого заключается в том, что конечным пользователям не нужно беспокоиться об установщике, распаковывающем огромную кучу изображений на своем компьютере, и когда обновления сделаны, я могу выложить один файл для загрузки пользователями, который свежая копия всего. Файлы, как правило, довольно большие (в настоящее время ~ 60 мегабайт), но конечные пользователи привыкли к этому, и приложение также имеет режим «без изображения» для тех, кто подключается по телефонной линии.

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

Я нахожусь в процессе обновления приложения, и мне интересно, есть ли лучший способ сделать это. Я все еще хотел бы сохранить единый подход к файлам для облегчения отправки обновлений пользователям и уменьшения площади на компьютере. Существует ли какая-либо «переносимая файловая система» или библиотека ресурсов, которую я могу использовать / создать, которая позволила бы мне легко вставлять / извлекать изображения из нее без необходимости иметь базу данных для взаимодействия приложения?

Ответы [ 4 ]

3 голосов
/ 06 мая 2009

Файл resx (скомпилированный в ресурс dll)? Или проще - почтовый файл? Возможно, используя # ZipLib.

0 голосов
/ 06 мая 2009

В зависимости от ваших обстоятельств, возможно создание файла типа ISAM.

Общий формат файла будет:

----------------
| Count  | int |
----------------
| Index  |
----------
| Images |
----------

Индексный формат

----------------
| offset | int |
----------------
| size   | int |
---------------------------
| description  | char(50) |
---------------------------
|  id    | int |
----------------

Счетом будет целое число, содержащее количество изображений в файле. Индекс будет содержать пары (смещение, размер), описывающие смещение в файле для поиска и число байтов для чтения, начиная с этого смещения.

Недостатком этого формата является то, что замена существующего изображения потребует перестройки файла.

Метаданные фиксированной длины, такие как описания и идентификаторы, могут быть помещены в заголовок.

(Возможно, одним из достоинств этого метода безумия является скорость доступа, если вы держите индекс в оперативной памяти.)

0 голосов
/ 06 мая 2009

Я использовал методы управления ImageList и AddStrip в аналогичных ситуациях. Затем у меня есть один гигантский файл PNG, который содержит все изображения. Это отлично подходит для иконок, но не подходит для других типов ресурсов.

0 голосов
/ 06 мая 2009

7zip также есть библиотека, которую вы также можете использовать, см. this

Кроме того, вы можете переместить изображения для отправки с веб-сервера и сделать так, чтобы клиент кешировал изображение локально, а затем иметь возможность периодически проверять клиент на наличие обновленного изображения, так что только необходимые изображения должны скачали.

У пользователей коммутируемого доступа также могут быть версии в формате lo-res.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...