如何在ImageView中显示位图后获取位图的大小

时间:2013-02-28 05:32:40

标签: android bitmap imageview android-imageview bitmapimage

我有一个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分辨率保存此图像。有可能吗?

提前致谢。

1 个答案:

答案 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