2012-04-30 3 views
2

Хорошие друзья форума.Сериализовать изображение в строчку

Я много искал, и я не мог найти, как сериализовать изображение и передать его в String в android.

как может быть не так, если кто-то знает и хочет сообщить мне, я был бы очень признателен !.

+0

Почему вы хотите «сериализовать изображение и передать его в строку»? – CommonsWare

+0

Взгляните на этот вопрос: http://stackoverflow.com/questions/2781545/convert-image-to-base64-string-using-java – Marcelo

+0

Мне нужно отправить его в веб-службу с помощью XML. Мне нужно отправить изображение в ярлык <Имя поля = "image"> (Изображение сериализованное) и многие другие этикетки и их содержимое. – JulioStyle88

ответ

1

Хотя класс java.awt.Image нет (не применяется) java.io.Serializable, javax.swing.ImageIcon есть. Из-за этого, вы можете сериализовать его следующим образом:

ImageIcon myImage; // declare somewhere 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(myImage); 
byte[] theBytes = baos.toByteArray(); 
StringBuffer buf = new StringBuffer(); 
for (byte b : theBytes) { 
    buf.append((char) b); // cast to char, then append 
} 
String theString = b.toString(); 

Я дам вам понять, как повернуть его вспять, но вот подсказка: вместо OutputStream классов, используйте InputStream классы.

+2

На Android нет Awt или Swing. Просто говорю :). – Brayden

+0

Ох. Виноват. Не заметил, что это Android. :) – wchargin

1

Вы можете прочитать байты изображения до byte[], а затем закодировать byte[] с использованием Base64, Here.

1

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

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

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

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