我有一个imageview
<ImageView
android:id="@+id/imgCaptured"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/captured_image" />
我从相机捕获图像,将该图像转换为位图。
Bitmap thumbnail;
thumbnail = MediaStore.Images.Media.getBitmap(getActivity()
.getContentResolver(), imageUri);
当我在上面的imageview中显示该位图之前得到该位图的分辨率,比如
Log.i("ImageWidth = " + thumbnail.getWidth(), "ImageHeight = "
+ thumbnail.getHeight());
它归还给我ImageWidth = 2592 ImageHeight = 1936
在此之后我在上面的imageview中将此位图显示为imgCaptured.setImageBitmap(thumbnail);
然后我将我的imageview的大小显示为
Log.i("ImageView Width = " + imgCaptured.getWidth(),
"ImageView Height = " + imgCaptured.getHeight());
这让我回复了ImageView Width = 480 ImageView Height = 720
现在我的问题是
如何在我的imageview中显示位图 之后获得该位图的大小。 我知道这可以通过使用此
来完成image.buildDrawingCache();
Bitmap bmap = image.getDrawingCache();
但这会创建一个大小与imageview相同的新位图。
我还想知道,在imageview中显示后,图像会自动调整大小。如果是,那么有没有办法在imageview中显示图像而不调整图像大小。
修改
实际上我已经拍摄了2592x1936的图像。我在imageView中显示了这个图像,对此图像做了一些其他操作。现在我想以相同的2592x1936分辨率保存此图像。有可能吗?
提前致谢。
答案 0 :(得分:9)
在ImageView中显示位图后,ImageView将创建一个BitmapDrawable对象,以在ImageView的Canvas中绘制它。因此,您可以调用ImageView.getDrawable()方法来获取BitmapDrawable的引用,并通过调用Drawable.getBounds(Rect rect)方法获取Bounds。通过边界,您可以计算在ImageView中绘制的位图的宽度和高度
Drawable drawable = ImageView.getDrawable();
//you should call after the bitmap drawn
Rect bounds = drawable.getBounds();
int width = bounds.width();
int height = bounds.height();
int bitmapWidth = drawable.getIntrinsicWidth(); //this is the bitmap's width
int bitmapHeight = drawable.getIntrinsicHeight(); //this is the bitmap's height