хранение изображений для встроенного приложения карты - PullRequest
1 голос
/ 14 февраля 2010

У меня есть растеризованная карта в разных разрешениях, которая состоит из 15K / 60K / 240K изображений размером 256x256 каждая, и у меня есть приложение .NET Compact Framework, которое может отображать карту. Но на копирование 300К файлов на SD-карту уходит много времени, примерно 35-60 часов (я скопировал всего 15К, и это заняло ~ 2-2,5 часа), и я боюсь, что это испортит файловую систему FAT16 (оборудование не поддерживает FAT32, поэтому я не могу переключить fat16 на fat32) или после копирования все будет работать очень медленно.

Все изображения хранятся следующим образом: /mapdata/resndomresolution‹/xabilitiesx_coord‹/yndomy_coord‹.png

Может ли мне помочь какая-нибудь встраиваемая БД? Или я должен упаковать изображения в zip, как /storage/res1/x12.zip со всеми архивами y * .png? Или мне просто нужно создать ISO-образ со всеми этими картинками и просто скопировать ISO в байты SD?

1 Ответ

1 голос
/ 15 февраля 2010

FAT16 ограничен 65 535 кластерами, и для каждого файла требуется минимум один кластер, что исключает использование только простых файлов.

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

Может быть, что-то вроде:

  • Какой-то заголовок, так что вы знаете, что это ваш файл.
  • Кортеж, который содержит смещение от начала файла до тайла для нулевого уровня масштабирования и его длину в байтах
  • Четыре кортежа для смещений и длин для плиток для уровня масштабирования "1"
  • ...
  • 4 ^ (n) кортежей для смещений и длин для плиток на уровне масштабирования "n"
  • Фактические данные плитки.

Было бы относительно легко искать смещения для данной плитки и переопределять поток, чтобы делать «правильные вещи» при сообщении об окончании потока - вы могли бы даже использовать то же смещение для изображений «без плитки», если вы будете кодировать область, которая не вписывается в квадрат (например, в Великобритании)

...