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