web-dev-qa-db-ja.com

Android:ImageView全体をビットマップに変換する方法

ImageViewの内側(centerInside)でサイズを変更して、異なる比率で画像を表示するアプリケーションがあります。必要なのは、背景(この場合は黒)を含むImageViewからビットマップを作成することです。

たとえば、デバイス画面320x480、280x480にサイズ変更された画像を含むフルスクリーンimageViewがあります。 320x480ビットマップを取得するにはどうすればよいですか?

このimageviewの上に、ビットマップに含めたくないいくつかのロゴやボタンがあります。それらは最上層のようなものです。私が必要なのは、いくつかの側面からの画像と黒い境界線を持つビットマップです。

39
yosh

やってみました:

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
61
Cristian

ImageViewの画像キャッシュを使用できます。ビュー全体を、新しいビットマップにレイアウト(スケーリング、背景付きなど)するときにレンダリングします。

ビルドされていることを確認してください。

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

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

95
Greg Giacovelli

ここで大声で考えてみてください(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);

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

5
kcoppock

これは動作するコードです

imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
3
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) {

    }
1
Mansh Sharma

buildDrawingCache()が廃止された後、Kotlinで動作します

 // convert imageView to bitmap
val bitmap = (imageViewId.getDrawable() as BitmapDrawable).getBitmap()
0
Arshia Ghodsi