我有一堆图像存储在我服务器的数据库中,作为我想在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中成功加载此格式的字节数组以显示图像?
答案 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);
让我知道!