Как сохранить очень большое изображение на iPhone / iPad - PullRequest
3 голосов
/ 18 февраля 2011

Какой лучший способ сохранить очень большое изображение для приложения для iOS? Я хочу, чтобы приложение могло просматривать изображения, размер которых может составлять сотни мегабайт, возможно, столько же, сколько гигабайт, как jpeg. Мне нужно иметь возможность сохранить изображение и извлечь выбранные области для отображения.

В настоящее время изображения нарезаются на плитки размером 512x512 пикселей и сохраняются в виде файлов jpeg в дереве каталогов с десятками тысяч листов (на самом деле это пирамида изображений, включая нижние образцы).

Не обращая внимания на вопрос об отображении изображения, меня интересует наиболее эффективный и управляемый способ хранения этих данных на устройстве: файлы, как они есть в настоящее время, в базе данных sqlite или что-то еще?

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

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Решением этой проблемы является предварительное разбиение огромного изображения, чтобы плитки могли быть быстро извлечены из файловой системы по мере необходимости.Одна проблема с очень большими изображениями состоит в том, что большинство решений требуют, чтобы все изображение отображалось в контексте и занимало огромные объемы памяти.В такой системе, как iOS, где память ограничена, способ решить эту проблему - использовать такую ​​библиотеку, как libjeg или libjpegturbo длявизуализируйте изображение строкой за раз, затем сохраните пиксели в сырой файл.Недостатком этого является то, что когда вам нужна одна плитка, вам нужно прыгать по всей файловой системе, находя каждую строку плитки.Таким образом, лучшим решением является не только пошаговое сканирование, но и пошаговое разбиение.Вы можете использовать mmap, чтобы отобразить файл в нужную вам область, так что вы действительно сможете минимизировать потребление памяти.Тем не менее, вы можете разбить Unified Buffer Queue на iOS так сильно, что приложение аварийно завершится, или даже вся система!

Если вам интересно, как реализовать вышеуказанное решение, на github есть свободно доступный проект.- PhotoScrollerNetwork - выполняет все вышеперечисленное.

1 голос
/ 18 февраля 2011

Образец от Apple: PhotoScroller

0 голосов
/ 18 февраля 2011

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

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