9

我希望我的应用程序的用户能够在运行时修改图像。用户应该能够通过点击图像视图的角并拖动它来修改图像的高度和宽度,如下图所示:

在此处输入图像描述

我花了很多时间研究这个,我发现 Make Sense of Multitouch and Resize a large bitmap file to scaled output file like Pinch Zoom 但这些都不符合我的要求。

目前我正在使用下面的函数调整位图的大小,并在 seekbar 的 onprogress 更改方法中更改宽度而不是 frame。通过使用此功能更改图像大小并不顺利。

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){

    try {
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //The new size we want to scale to
        final int REQUIRED_WIDTH=WIDTH;
        final int REQUIRED_HIGHT=HIGHT;

        //Find the correct scale value. It should be the power of 2.
        int scale=1;
        while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
            scale*=2;

        //Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    }
        catch (FileNotFoundException e) {}
    return null;

}

更新 :

现在使用这个问题的公认答案在画布中使用绘图位图顺利工作。

现在铰孔部分正在将图像周围的框架设置为裁剪框架之类的东西。

请帮助我实现这一目标。

4

2 回答 2

1

“你这样做是错的”。

Bitmap您有几个选择,而不是每次都创建新的:

  1. 调整ImageView自身大小。
  2. 创建您自己的View并使用Canvas. Btimap这将让您随心所欲地伸展。

如果您选择Canvas,那么要显示这些“裁剪点”,您也可以在画布上绘制它们。尽管如此,为了实现所需的行为和外观,您可能还需要覆盖这些方法:

  1. onTouchEvent- 当用户触摸裁剪点时,处理您的调整大小行为。
  2. onMeasure- 稍微增加你的尺寸View,因为你的“裁剪点”稍微超出图像。
于 2013-08-01T06:42:34.657 回答
1

你可以使用这个 来完成这个, 使用cropimageview3并将你的图像设置为float drawable,你就完成了

于 2013-12-31T11:24:34.320 回答