2011-01-17 14 views
36

私は、(centerInside)imageView内でサイズ変更された異なる比率で画像を表示するアプリケーションを持っています。私が必要なのは、背景(この場合は黒)を含むImageViewからビットマップを作成することです。Android:ImageView全体をビットマップに変換するには?

たとえば、デバイス画面320x480、画像サイズ280x480のフルスクリーンのimageViewがあります。どうすれば320x480ビットマップを得ることができますか?

この画像の上には、ビットマップに含めたくないロゴやボタンがあります。トップレイヤーに似ています。私が必要とするのは、ビットマップで画像と黒の境界線があります。

答えて

88

imageViewのイメージキャッシュを使用するだけで済みます。これは、ビュー全体がレイアウトされている(スケーリングされ、背景などと接している)新しいビットマップにレンダリングします。

それが構築されていることを確認してください。

imageView.buildDrawingCache(); 
Bitmap bmap = imageView.getDrawingCache(); 

画面に表示されるビットマップがあります。

+2

いいですが、ただNullPointerExceptionでcritをポップします。それはイメージがまだ構築されていないからです。 – yosh

+5

また、http://stackoverflow.com/questions/2339429/android-view-getdrawingcache-returns-null-only-nullと一緒に問題を解決しました:)ありがとう。 – yosh

+4

'buildDrawingCache()'には 'destroyDrawingCache'を呼び出す必要があります(http://developer.android.com/reference/android/view/View.html#buildDrawingCache%28boolean%29) –

54

は、あなたがしようとしたがいる:

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 
+0

です。私は黒い境界線と一緒にビットマップを作成するいくつかの速い方法が必要です。ここでは、画像の向きと中央と両方の黒い枠線を計算して、画像から作成したビットマップに手動で追加する必要があると思います。 – yosh

+0

目に見える部分だけでなく、ImageViewの実際の内容を取得したい場合は、間違いなく最適な解決策です。 –

+0

imageView.getDrawingCache()は実際のビットマップ表現を取得し、キャッシュがクリアされるとビットマップが失われることに注意してください。 – secretlm

4

は、もしかしたらこのような何かが働くだろう(Javaでのグラフィックスを扱う確かに少し専門知識を持つ)大声でここを考える?:好奇心のうち

ImageView iv = (ImageView)findViewById(R.id.imageview); 
Bitmap bitmap = Bitmap.createBitmap(iv.getWidth(), iv.getHeight(), Bitmap.Config.RGB_565); 
Canvas canvas = new Canvas(bitmap); 
iv.draw(canvas); 

、あなたは何を達成しようとしていますか?あなたが念頭に置いているよりもあなたの目標を達成するためのより良い方法があるかもしれません。

+1

画面全体をスライスする必要があり、例えば、タイルに半分の画像しかない場合は黒いエッジを持たせたい+画像を画面の中央に配置したい。キャンバスは、いくつかの悪いJ2MEの思い出をもたらします:D – yosh

+0

多分私は誤解しています...あなたは単に画像をタイルしたいですか?自動的にタイル表示するXML形式のビットマップ描画を定義することができます。私はあなたが何を求めているのか正確には分かりません。 – kcoppock

+0

画像を黒い背景を含む正方形(つまり50x50)にスライスしたいとします。画像の色/比率が異なります。私は、イメージコンテンツだけでなく、ImageView全体からビットマップを作成するのが速いと考えました。 – yosh

1
try { 
     photo.setImageURI(Uri.parse("Location"); 
     BitmapDrawable drawable = (BitmapDrawable) photo.getDrawable(); 
     Bitmap bitmap = drawable.getBitmap(); 
     bitmap = Bitmap.createScaledBitmap(bitmap, 70, 70, true); 
     photo.setImageBitmap(bitmap); 

    } catch (Exception e) { 

    } 
0

これは、画像の大きさを与えるが、それは問題ではない作業コード

imageView.setDrawingCacheEnabled(true); 
imageView.buildDrawingCache(); 
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache()); 
関連する問題