Отображение изображения в виджете ImageViewer Android с использованием массива байтов, созданного в .NET - PullRequest
0 голосов
/ 26 июля 2011

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

Массивы байтов были созданы из изображений в приложении Windows Phone 7, поэтому для записи в IsolatedStorageFileStream (isfs) используется .NET WriteableBitmap (wbmp):

     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, а затем загрузить InputStream в 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 для отображения изображения?

1 Ответ

0 голосов
/ 27 июля 2011

Согласно 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); 

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

...