Отображение изображения в виджете Android ImageViewer с использованием байтового массива, созданного на .net
-
26-10-2019 - |
Вопрос
У меня есть куча изображений, хранящихся в базе данных моего сервера в качестве массивов байтов, которые я хотел бы потреблять в моем приложении Android.
Байтовые массивы были созданы из изображений в приложении Windows Phone 7, поэтому использование writeablebitmap .net (WBMP) для сохранения в изолированном storagefilestream (ISFS):
wbmp.SaveJpeg(isfs, newWidth, newHeight, 0, 90);
В приложении Android у меня есть виджет ImageView, который я пытаюсь использовать для отображения одного из изображений. Я попытался использовать Bitmapfactory для декодирования массива байтов (полезная нагрузка):
Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp);
Но это не работает - ни один изображение показывает, а BMP не является нулевым, когда я прохожу отладчик. Похоже, что это указывает на то, что Bitmapfactory не может должным образом декодировать массив байтов.
Для Windows Phone 7 я просто загружаю байт [] (реальность) в MemoryStream (MSTREAM), затем вызову метод SetSource с растровым (BMP) с помощью этой MemoryStream:
mstream = new MemoryStream(reality);
bmp.SetSource(mstream);
Итак, на Android я попытался прочитать массив байтов в файл памяти, а затем загрузил входной сериал MemoryFile с помощью BitmapFactory:
MemoryFile mf;
try {
mf = new MemoryFile("myFile", payload.length);
mf.writeBytes(payload, 0, 0, payload.length);
InputStream is = mf.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(is);
img1.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
Но это все еще не работает.
Как я могу успешно загрузить байтовый массив в этом формате в Android, чтобы отобразить изображение?
Решение
Согласно Bing и здесь, эта ошибка, вероятно, указывает на неверное изображение. Я бы тщательно проверил, что вы загружаете правильный URL. Если это так, попробуйте печатать содержимое этого байта [] в журнал (или проверить его в отладчике); Посмотрите, является ли это каким -то посланием HTML.
Бинго! На основании вашей дополнительной информации это Base64-кодируемые данные. То, что вы опубликовали, было слишком похоже на простой текст, поэтому я попытался запустить его через Uudecode и Base64 -d на моем машине Linux. Последний работал, генерируя файл, который был признан JPEG.
Декодирование это должно быть довольно просто. Измените это:
Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp);
к этому:
import android.util.Base64;
...
payload = Base64.decode(payload, Base64.Default);
Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp);
Дай мне знать!