2015-04-21 5 views
2

У меня есть: для каждого из цветов r, g и b - двумерный массив целых чисел в диапазоне [0,255]. Я хочу: создать BMP из этого массива и отправить его клиенту. Проблема в том, что я не могу использовать java.awt.Color, BufferedImage и т. Д., Так как они недоступны в App Engine. В App Engine есть служба обработки изображений, которая, однако, предназначена для изображений, которые у меня уже есть, а не для создания изображений с нуля.Использование Java в Google App Engine, как мне сделать BMP-образ из массива массивов значений int r, g, b?

Я рассматриваю возможность обучения себя тому, как «вручную» создать BMP, но это действительно похоже на большую работу. Должен ли я это делать, или есть более простой способ?

ответ

1

BMP format довольно прост по сравнению с JPG или PNG, например.

У этого есть много полей заголовка и бит, но вам не нужно вычислять/заполнять все. В основном вам нужно создать/написать заголовок BMP, который составляет менее 100 байт (~ 56, если я хорошо помню). Только несколько полей, которые необходимо установить, например. размер изображения в пикселях, тип изображения (например, бит/байты на пиксель) и т. д. Вы можете использовать тип изображения, который идентичен вашему: 3 байта на пиксель (компоненты r, g и b).

После того, как вы получили это, данные изображения следует за тем, что вы можете просто написать, как есть, помните, что BMP хранит изображения в обратном порядке, и может иметь длину строки в 4 байта например.

Вот и все! Обратите внимание, что я не упомянул java.awt.Image или java.awt.Color, потому что они не нужны для создания простых BMP.

Я рассматриваю размещение полного кода из «объема», как вы его еще не разместили.

Вот пример реализации Java, использовать его или изменить/настроить его под свои нужды:

http://www.javaworld.com/article/2077561/learn-java/java-tip-60--saving-bitmap-files-in-java.html

Есть также много других реализаций Java, не бойтесь искать.

+1

Я использую очень похожий подход для генерации PNG в App Engine, вдохновленный [этим примером] (https://github.com/greghaskins/googleappengine/tree/master/java/demos/mandelbrot/src/com/google/AppEngine/демки/Мандельбро) – tx802