使用在.NET上创建的字节数组在Android Image Viewer小部件中显示图像

时间:2011-07-25 22:23:57

标签: android windows-phone-7 android-imageview writeablebitmap bitmapfactory

我有一堆图像存储在我服务器的数据库中,作为我想在Android应用中使用的字节数组。

字节数组是从Windows Phone 7应用程序中的图像创建的,因此使用.NET的WriteableBitmap(wbmp)保存到IsolatedStorageFileStream(isfs):

     wbmp.SaveJpeg(isfs, newWidth, newHeight, 0, 90);

在Android应用程序中,我有一个ImageView小部件,我试图用它来显示其中一个图像。我尝试使用BitmapFactory解码字节数组(有效负载):

    Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
    img1.setImageBitmap(bmp); 

但是这不起作用 - 当我单步执行调试器时,没有图像显示,bmp为null。这似乎表明BitmapFactory无法正确解码字节数组。

对于Windows Phone 7,我只是将byte [](现实)加载到MemoryStream(mstream)中,然后使用该MemoryStream调用Bitmap(bmp)的SetSource方法:

    mstream = new MemoryStream(reality);
    bmp.SetSource(mstream);

然后在Android上我尝试将字节数组读入MemoryFile,然后使用BitmapFactory加载MemoryFile的InputStream:

    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 :(得分:0)

根据Bing和此处,此错误可能表示图像无效。我会仔细仔细检查您是否正在下载正确的URL。如果是,则尝试将该byte []的内容打印到日志中(或在调试器中检查);看看它是否是某种类型的HTML消息。

宾果!根据您的额外信息,这是Base64编码的数据。你发布的内容看起来太像纯文本了,所以我尝试在我的Linux机器上通过uudecode和base64 -d运行它。后者工作,生成一个被识别为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); 

让我知道!