2011-09-29 2 views
0

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

В принципе, для грубого форсинга это решение потребует от меня сохранения данных цвета пикселя каждого человека в файл. Однако это приведет к созданию ОГРОМНОГО файла. Я знаю, что есть лучший способ - например, если есть огромная часть изображения, которое состоит из одного цвета, разбивая область на меньшие квадраты и прямоугольники и сохраняя их координаты и размер в файл.

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

Например, верхняя коробка имеет начало 0,0, размер 359,48 и представляет собой цвет черный. Сохранено в текстовом файле, данные будут 0,0,359,48,0.

sample algorithm output

Какой алгоритм это будет?

ПРИМЕЧАНИЕ. SDK, который я использую, не может вернуть цвет пикселя из координаты X, Y. Тем не менее, я могу загружать внешнюю информацию в программу из текстового файла и манипулировать ею таким образом. Эти данные, которые мне нужно экспортировать в текстовый файл, будут из другой утилиты, которая будет иметь возможность получить цвет пикселя из координат X, Y.

EDIT: Добавлено изображение edit2: Добавлены ограничения

+4

PNG или GIF? Вам не нужно изобретать компрессию изображений :) –

+2

Не могли бы вы объяснить, почему вы хотите сохранить изображение (или его части) в виде обычного текста? Не можете ли вы использовать двоичное представление? Кроме того, если изображения, как правило, имеют много смежных прогонов пикселей одного цвета, вы можете использовать так называемую кодировку длины прогона (RLE). В качестве альтернативы можно использовать один из алгоритмов сжатия Lempel-Ziv-something (LZ77, LZ78, LZW). –

+0

Проблема не в самом изображении - это SDK, который я использую. Я не могу получить цвет определенного пикселя из самого изображения внутри SDK. Таким образом, мне нужно придумать решение, которое преобразует указанные данные в текстовый файл, который я мог бы загрузить в приложение и манипулировать. –

ответ

1

Не могли бы вы объяснить, почему вы хотите сохранить изображение (или его части) как обычный текст? Не можете ли вы использовать двоичное представление? Кроме того, если изображения, как правило, имеют много смежных прогонов пикселей одного цвета, вы можете использовать так называемую кодировку длины прогона (RLE). В качестве альтернативы можно использовать один из алгоритмов сжатия Lempel-Ziv-something (LZ77, LZ78, LZW).

0

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

Если необходимо, чтобы .txt-файл имел какое-то текстовое значение, тогда у вас могут быть некоторые проблемы.

0

В cs существует алгоритм, такой как пространственный индекс для рекурсивного разбиения плоскости на 4 плитки. Если ячейка имеет тот же размер, она выглядит как квадрант. Если вы хотите, чтобы вы разделили плоскость на образец (цветов), вы можете использовать эту идею черепицы для динамического изменения размера ячейки. Хорошим началом для изучения является z-кривая или кривая гильберта.

Смежные вопросы