3

我有一个非常有趣的问题要解决:

我得到一个静态的谷歌地图图像,带有这样的URL

我尝试了几种方法来获取此信息:将“远程资源”作为 ByteArrayOutputStream 获取,将图像存储在模拟器的 SD 中,等等……但每次得到一个IlegalArgumentException

我总是得到一个 200 http 响应和正确的 MIME 类型(“image/png”),但无论哪种方式:获取图像并将其转换为位图,或将图像存储在 SD 中并稍后读取;我得到相同的结果......文件总是损坏。

我真的相信它是一个编码问题,或者阅读方法(类似于这个):

public static Bitmap downloadImage(InputStream inStream){
  byte[] buffer = new byte[256];
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  while (inStream.read(buffer) != -1){
    baos.write(buffer);
  }
  baos.flush();
  baos.close();

  byte[] imageData = baos.toByteArray();
  Bitmap bi = Bitmap.createBitmapFromBytes(imageData, 0, imageData.length, 1);
  //Bitmap bi = Bitmap.createBitmapFromBytes(imageData, 0, -1, 1);
  return bi;
}

唯一想到的是 imageData.lenght (在响应中,内容长度为: 6005 ),但我真的无法弄清楚这一点。任何帮助都非常受欢迎......

4

2 回答 2

3

试试这种方式:

InputStream input = httpConn.openInputStream();
byte[] xmlBytes = new byte[256];
int len = 0;
int size = 0;
StringBuffer raw = new StringBuffer();
while (-1 != (len = input.read(xmlBytes))) 
{
    raw.append(new String(xmlBytes, 0, len));
    size += len;
}
value = raw.toString();
byte[] dataArray = value.getBytes(); 
EncodedImage bitmap;
bitmap = EncodedImage.createEncodedImage(dataArray, 0,dataArray.length);
final Bitmap googleImage = bitmap.getBitmap();
于 2011-01-24T03:54:02.787 回答
2

斯瓦蒂的回答很好。同样的事情可以用更少的代码行来完成:

InputStream input = httpConn.openInputStream();
byte[] dataArray = net.rim.device.api.io.IOUtilities.streamToBytes(input);
Bitmap googleImage = Bitmap.createBitmapFromBytes(dataArray, 0, -1, 1);
于 2011-02-08T05:09:40.537 回答