如何从ImageView获取缩放后的位图

14

我有一个Activity,其中定义了一个自定义的ImageView,用于对图像进行捏合缩放功能。现在,我的问题是我想从捏合缩放功能中获取缩放后的Bitmap。例如,如果用户在图像上执行缩放操作,则我想将图像的确切大小和位置作为Bitmap存储。

这是我在XML中声明的自定义ImageView。

<com.cam.view.PinchZoom_ImageView 
  android:id="@+id/gallery_selected_image_view"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:src="@drawable/icon"
  android:scaleType="center"
 />

更新:

我尝试使用下面的代码来获取缩放后的图像,但它返回了一个空白的位图。

        pinchZoom.setDrawingCacheEnabled(true);
        pinchZoom.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        pinchZoom.layout(0, 0, pinchZoom.getMeasuredWidth(), pinchZoom.getMeasuredHeight());
        pinchZoom.buildDrawingCache(true);
        Bitmap_gallery_Item = Bitmap.createBitmap(pinchZoom.getDrawingCache());
        pinchZoom.setDrawingCacheEnabled(false);

希望能得到任何帮助。谢谢。

3个回答

12

好了,最终我简直不敢相信这只需要一行代码。我最终使用了矩阵成功地解决了问题。解决方案非常简单,我将图像的平移和缩放保存在一个矩阵中。因此,我将那个最终的矩阵声明为public static,并使用该矩阵在画布上创建位图。

        Canvas comboImage = new Canvas(cs);
        background = Bitmap.createScaledBitmap(background, width, height, true);
        comboImage.drawBitmap(background, 0, 0, null);
        comboImage.drawBitmap(foreground, PinchZoom_ImageView.matrix, null);

从这里可以看出PinchZoom_ImageView.matrix。这是一个包含我缩放和平移图像的最终位置的matrix,我已将其声明为public static


@Lalit Poptani - 看起来这只适用于显式设置ImageView矩阵的情况。如果有一种方法可以提取当前显示的位图而不考虑比例类型,那就太好了。 - whitneyland

0
如果你使用了scaleType="fitxy",那么你可以使用缩放因子来放大或缩小ImageView的宽度/高度 - 这也意味着你可以拉回图像的精确高度/宽度,因为它具有与其容器相同的尺寸。

希望对你有所帮助。


我没有固定的伙伴,我的图像是可移动的,并且也允许缩放,因此我想在图像经过平移和缩放后存储位图。谢谢。 - Lalit Poptani
好的 - 我不知道情况如何,但是你能否通过像上面那样实现ImageView来使图像可移动和缩放呢? - Graeme
你的意思是通过使用scaleType="fitxy"来实现吗? - Lalit Poptani
是的,通过使用ImageView作为图像。 - Graeme
好的,我会假设有原因不建议更改它 :) - Graeme

0

@Lalit Poptani 好的,朋友。 - Venky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接