3

私は解決すべき非常に興味深い問題を抱えています:

このような URL を持つ静的な Google マップ画像を取得しています。

この情報を取得するために、いくつかの方法を試しました。「リモート リソース」を 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.length (応答では、コンテンツの長さは: 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 に答える