如何遮挡图像,例如我们可以缩放/缩放/旋转背景图像而不是遮罩?
我应该可以缩放此蒙版中的图像,但它会缩放整个图像。
建议我实现这一目标,我正在创建一个照片拼贴应用程序。
蓝色是布局的背景。
白色用于遮罩
我能够通过蒙版实现这种类型的布局,但是当我应用MultiTouchListener进行缩放和缩放时,它将使用蒙版缩放整个图像,而不是缩放其中的图像。
private void getMaskedBitmap() {
Bitmap bgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_drawable);
ImageView bg = (ImageView) findViewById(R.id.bg);
bg.setImageBitmap(bgBitmap);
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap emptyBitmap = Bitmap.createBitmap(bgBitmap.getWidth(), bgBitmap.getHeight(), conf);
Canvas canvasBmp = new Canvas(bgBitmap);
ImageView mImageView = (ImageView) findViewById(R.id.troll_face);
Bitmap original = BitmapFactory.decodeResource(getResources(), R.drawable.random_drawable);
Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.mask_drawable);
original = Bitmap.createScaledBitmap(original, mask.getWidth(), mask.getHeight(), true);
Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Config.ARGB_8888);
Canvas mCanvas = new Canvas(result);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mCanvas.drawBitmap(original, 0, 0, null);
mCanvas.drawBitmap(mask, 0, 0, paint);
paint.setXfermode(null);
mImageView.setImageBitmap(result);
//mImageView.setScaleType(ScaleType.FIT_XY);
mImageView.setBackgroundResource(R.drawable.background_drawable);
bg.setOnTouchListener(new MultiTouchListener());
mImageView.invalidate();
}
行上的例外
Canvas canvasBmp = new Canvas(bgBitmap);
java.lang.IllegalStateException:传递给Canvas构造函数的不可变位图
答案 0 :(得分:1)
我无法为您提供代码,但这是您应该做的:
将背景图像作为位图获取并在视图的画布上绘制。
创建一个相同大小的新(空)位图(使用Bitmap.Config.ARGB_8888)并获取其画布,在这里您将绘制蒙版。
Canvas canvasBmp = new Canvas(bmp);
现在在视图的画布上绘制bmp。所以,你可以在图像上获得蒙版效果。
缩放(重新调整大小等任何你想要的)背景位图图像。
使您的观看无效,并再次执行所有步骤