Каков наилучший способ сериализации изображения (совместимого с Swing) с Java на Android? - PullRequest
4 голосов
/ 03 апреля 2012

Я разрабатываю приложение для Android, которое представляет собой викторину. С другой стороны, я разрабатываю настольный инструмент, полностью основанный на Swing. Настольный инструмент используется для вставки вопросов викторины и создает сериализованный объектный файл, который содержит все вопросы. Я использовал java.awt.Image для хранения изображения, к которому прикреплен вопрос.

К сожалению, когда я закончил разработку настольного инструмента и перешел на сторону Android, я понял, что у Android нет java.awt.Image. Так что мой вопрос , есть ли в любом случае включение java.awt.Image в приложение для Android? или есть другой класс, доступный как на Java, так и на Android, который работает с Image, помимо поддержки компонентов Swing? или, по крайней мере, есть альтернатива для решения проблемы, с которой я столкнулся?

Примечания: Вы можете задаться вопросом, почему я сериализую объект, а не просто извлекаю вопросы из XML или базы данных. Это потому, что мне нужно иметь древовидную структуру данных в качестве категорий вопросов; В каждой категории есть список вопросов, кроме подкатегории.

Ответы [ 2 ]

8 голосов
/ 04 апреля 2012

Вот решение: используйте BufferedImage на стороне Java и преобразуйте его в байтовый массив, затем на стороне Android получите массив байтов и преобразуйте его в Bitmap.

Java сторона:

public static byte[] imageToByteArray(BufferedImage image) throws IOException
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(image, "png", baos);
    return baos.toByteArray();
}

/*
public static BufferedImage byteArrayToImage(byte[] imageArray) throws IOException
{
    return ImageIO.read(new ByteArrayInputStream(imageArray));
}
*/

Сторона Android:

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inDither = true;
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
byte[] imageByteArray = getImageByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(imageByteArray, 0, imageByteArray.length, opt);
imageView.setImageBitmap(bitmap);
3 голосов
/ 03 апреля 2012

Используйте ImageIO, чтобы записать изображение в «png» или «jpg».например, http://docs.oracle.com/javase/tutorial/2d/images/saveimage.html

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