图像合成(5)

如果已经选择了两幅图像,且两个位图对象均已完成实例化,那么能够继续合成操作。这个过程与本章之前的示例非常类似。首先,创建一个空的可变位图对象,它的大小和配置与第一个位图对象(bmp1)相同。随后,根据它构建一个Canvas对象和一个Paint对象。我们只会在该画布上绘制第一个位图对象(bmp1),因此它变成了合成操作的目标。

现在可以设置Paint对象上的过渡模式。通过传入一个定义操作模式的常量,实例化一个新的PorterDuffXfermode对象。然后,在Canvas对象上绘制第二个位图对象,并且将ImageView设置为新的位图对象。以下版本的代码将使用MULTIPLY模式。

 

               if (onePicked && twoPicked){

                    Bitmap drawingBitmap = Bitmap.createBitmap(bmp1.

                            getWidth(),bmp1.getHeight(), bmp1.getConfig());

                    canvas = new Canvas(drawingBitmap);

                    paint = new Paint();

                    canvas.drawBitmap(bmp1, 0, 0, paint);

                    paint.setXfermode(new PorterDuffXfermode(android.

                           graphics.PorterDuff.Mode.MULTIPLY));

                    canvas.drawBitmap(bmp2, 0, 0, paint);

 

                    compositeImageView.setImageBitmap(drawingBitmap);

               }

          }

     }

读书导航