如何将Image的选定区域设置为ImageView

时间:2014-02-11 12:08:59

标签: android imageview

我正在尝试将图片设置为来自外部存储的图像imageview视图,我完成了这项工作,但事实是它将整个图像设置为imageview而我只想设置所选该图像的方形区域。 Just life facebook提供了设置个人资料照片的功能.. 任何人都可以帮我做吗? 以下是我想做的样本..

enter image description here

2 个答案:

答案 0 :(得分:2)

这样的事情:

public static Bitmap cropBitmapToSquare(Bitmap bmp) {

    System.gc();
    Bitmap result = null;
    int height = bmp.getHeight();
    int width = bmp.getWidth();
    if (height <= width) {
        result = Bitmap.createBitmap(bmp, (width - height) / 2, 0, height,
                height);
    } else {
        result = Bitmap.createBitmap(bmp, 0, (height - width) / 2, width,
                width);
    }
    return result;
}

以下是有裁剪活动的示例:

http://khurramitdeveloper.blogspot.ru/2013/07/capture-or-select-from-gallery-and-crop.html

答案 1 :(得分:0)

实际上我上面关于setImageMatrix的评论不是最好的解决方案,试试这个自定义Drawable(不需要分配任何临时位图):

class CropDrawable extends BitmapDrawable {

    private Rect mSrc;
    private RectF mDst;

    public CropDrawable(Bitmap b, int left, int top, int right, int bottom) {
        super(b);
        mSrc = new Rect(left, top, right, bottom);
        mDst = new RectF(0, 0, right - left, bottom - top);
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawBitmap(getBitmap(), mSrc, mDst, null);
    }

    @Override
    public int getIntrinsicWidth() {
        return mSrc.width();
    }

    @Override
    public int getIntrinsicHeight() {
        return mSrc.height();
    }
}

和测试代码:

    ImageView iv = new ImageView(this);
    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.test);
    Drawable d = new CropDrawable(b, 150, 100, 180, 130);
    iv.setImageDrawable(d);
    setContentView(iv);