我的应用程序显示不同比例的图像,并在(centerInside)imageView 内调整大小。我需要的是从 ImageView 创建位图,包括背景(在本例中为黑色)。
例如,我的设备屏幕为 320x480,全屏 imageView 的图像大小调整为 280x480。我怎样才能从中获得 320x480 位图?
在此图像视图之上,我有一些徽标或按钮,我不想将其包含到位图中,它们就像在顶层一样。我所需要的只是带有图像和某些侧面的黑色边框的位图。
您可以只使用 imageView 的图像缓存。它将在布局(缩放、与背景边框等)时将整个视图渲染为新的位图。
只要确保它建成即可。
imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();
这是屏幕上看到的位图。
你尝试过吗:
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
只是在这里大声思考(诚然,我对 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);
出于好奇,您想实现什么目标?可能有比您想象的更好的方法来实现您的目标。
这是一个工作代码
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
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) {
}
在
buildDrawingCache()
被弃用后,它可以在 Kotlin 中工作
// convert imageView to bitmap
val bitmap = (imageViewId.getDrawable() as BitmapDrawable).getBitmap()
在 Kotlin 中;
imageView.drawable?.let {
val mBitmap = (it as BitmapDrawable).bitmap
}
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);