2016-08-30 13 views
0

ユーザーが場所選択ツールを使用してマップのスナップショットを撮りたいと思います。この画像をSDカードに保存しています。しかし、それは非常に品質が悪いです。なぜ私は理解できないのですか?このコード行では、画像の品質を100に設定しました:bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);非常に品質が悪く、マップアクティビティのスナップショットが小さすぎます

スナップショットは、次のようになります。

enter image description here

しかし、私はテキストのみ「グーグル」が含まれ、次の画像内の1つのような良質の少し大きな画像、欲しい:

enter image description here

ダイアログに表示されている地図の中間イメージが必要です。私はthis answer.

を以下のよ

画像を処理し、スナップショットを取るの私のコードは次のとおりです。

//opening place picker activity. 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == PLACE_PICKER_REQUEST 
      && resultCode == Activity.RESULT_OK) { 

     final Place place = PlacePicker.getPlace(this, data); 
     final CharSequence name = place.getName(); 
     final CharSequence address = place.getAddress(); 



     String attributions = (String) place.getAttributions(); 
     if (attributions == null) { 
      attributions = ""; 
     } 
    // tv4.setText(place.getLatLng().toString()+"\n"+name+"\n"+address+"\n"+attributions); To get latitide and longitudes. 
     tv4.setText(address+"\n"+attributions); 

     LatLngBounds selectedPlaceBounds = PlacePicker.getLatLngBounds(data); 
     // move camera to selected bounds 
     CameraUpdate camera = CameraUpdateFactory.newLatLngBounds(selectedPlaceBounds,0); 
     mMap.moveCamera(camera); 

     // take snapshot and implement the snapshot ready callback 
     mMap.snapshot(new GoogleMap.SnapshotReadyCallback() { 
      Bitmap bitmap=null; 
      public void onSnapshotReady(Bitmap snapshot) { 
       // handle snapshot here 
       bitmap = snapshot; 
       try { 
        FileOutputStream out = new FileOutputStream("/mnt/sdcard/Download/000p.png"); 
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
        Toast.makeText(Main2Activity.this,"dsfds",Toast.LENGTH_LONG).show(); 
       } catch (Exception e) { 
        Toast.makeText(Main2Activity.this,e.toString(),Toast.LENGTH_SHORT).show(); 
        e.printStackTrace(); 
       } 
      } 

     }); 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

が、私はこれを達成するために何を変更する必要がありますか?このスナップショットを取得する他の方法はありますか?

ありがとうございました!

答えて

0

これはわかりませんが、スナップショットを取るとCameraUpdateが完了していない可能性があります。

あなたはこれを試みることができる:

boolean placePicked = false; 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == PLACE_PICKER_REQUEST && resultCode == Activity.RESULT_OK) { 
     placePicked = true; 
     // Do everything else, except taking the snapshot. 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

@Override 
public void onCameraIdle() { 
    if (placePicked) { 
     placePicked = false; 

     // take snapshot... 
    } 
} 

onCameraIdleがあっするCameraUpdateであり、それが終了したときに呼び出されるメソッドです。

あなたの活動はGoogleMap.OnCameraIdleListenerを実装し、mMap.setOnCameraIdleListener(this);の中にonMapReady()のマップに追加する必要があります。

また、マップが既に読み込まれていると仮定しています。そうでない場合は、onMapLoaded()を使用してそれを考慮する必要があります。

+0

詳細情報を提供できますか? –

+0

確かに、あなたは何を知りたいですか?あなたが 'mMap.move(cameraUpdate)'を呼んだ瞬間、地図は動かなければならず、時間がかかります。だから、 'mMap.move(...)'の直後に 'mMap.snapshot(...)'を呼び出すと、マップが準備できないかもしれません。私はこれをテストしていない、それは理論に過ぎませんが、答えに示唆しているものを試してみてください。 – jpvillegas

関連する問題