0

我有一堆图像存储在我的服务器数据库中,作为我想在我的 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 为空。这似乎表明 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 中成功加载这种格式的字节数组来显示图像?

4

1 回答 1

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); 

让我知道!

于 2011-07-27T02:44:33.693 回答