Android图像蒙版与旋转&规模

时间:2015-03-30 13:04:35

标签: android

如何遮挡图像,例如我们可以缩放/缩放/旋转背景图像而不是遮罩?

mask

我应该可以缩放此蒙版中的图像,但它会缩放整个图像。

建议我实现这一目标,我正在创建一个照片拼贴应用程序。

collage

蓝色是布局的背景。

白色用于遮罩

我能够通过蒙版实现这种类型的布局,但是当我应用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构造函数的不可变位图

1 个答案:

答案 0 :(得分:1)

我无法为您提供代码,但这是您应该做的:

  1. 将背景图像作为位图获取并在视图的画布上绘制。

  2. 创建一个相同大小的新(空)位图(使用Bitmap.Config.ARGB_8888)并获取其画布,在这里您将绘制蒙版。

    Canvas canvasBmp = new Canvas(bmp);

  3. 现在在视图的画布上绘制bmp。所以,你可以在图像上获得蒙版效果。

  4. 缩放(重新调整大小等任何你想要的)背景位图图像。

  5. 使您的观看无效,并再次执行所有步骤

相关问题