Отображение изображения в виджете Android ImageViewer с использованием байтового массива, созданного на .net

StackOverflow https://stackoverflow.com/questions/6823110

Вопрос

У меня есть куча изображений, хранящихся в базе данных моего сервера в качестве массивов байтов, которые я хотел бы потреблять в моем приложении 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); 

Дай мне знать!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top