Android:如何将整个ImageView转换为Bitmap?

问题描述 投票:0回答:8

我的应用程序显示不同比例的图像,并在(centerInside)imageView 内调整大小。我需要的是从 ImageView 创建位图,包括背景(在本例中为黑色)。

例如,我的设备屏幕为 320x480,全屏 imageView 的图像大小调整为 280x480。我怎样才能从中获得 320x480 位图?

在此图像视图之上,我有一些徽标或按钮,我不想将其包含到位图中,它们就像在顶层一样。我所需要的只是带有图像和某些侧面的黑色边框的位图。

android image bitmap screen imageview
8个回答
98
投票

您可以只使用 imageView 的图像缓存。它将在布局(缩放、与背景边框等)时将整个视图渲染为新的位图。

只要确保它建成即可。

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

这是屏幕上看到的位图。


79
投票

你尝试过吗:

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

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);

出于好奇,您想实现什么目标?可能有比您想象的更好的方法来实现您的目标。


3
投票

这是一个工作代码

imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());

2
投票
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
投票

buildDrawingCache()
被弃用后,它可以在 Kotlin 中工作

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

0
投票

在 Kotlin 中;

imageView.drawable?.let {
        val mBitmap = (it as BitmapDrawable).bitmap
    }

0
投票

由于

buildDrawingCache()
已被弃用,从这个SO答案,我们需要直接从任何android视图获取位图。

示例:

fun getBitmapFromView(view: View): Bitmap {
    val bitmap = Bitmap.createBitmap(
        view.width, view.height, Bitmap.Config.ARGB_8888
    )
    val canvas = Canvas(bitmap)
    view.draw(canvas)
    return bitmap
}

fun getBitmapFromView(view: View, defaultColor: Int): Bitmap {
    val bitmap = Bitmap.createBitmap(
        view.width, view.height, Bitmap.Config.ARGB_8888
    )
    val canvas = Canvas(bitmap)
    canvas.drawColor(defaultColor)
    view.draw(canvas)
    return bitmap
}

这样使用:

//@param rootView is View object which you want to get bitmap
Bitmap bitmap = getBitmapFromView(rootView);
Bitmap bitmapColored = getBitmapFromView(rootView, Color.WHITE);
© www.soinside.com 2019 - 2024. All rights reserved.