0

我需要在动态壁纸中叠加两个图像。叠加图像是需要设置为“加法”叠加的 jpg。它添加像素值而不是计算透明度。我怎样才能在android中实现这一点?

4

2 回答 2

2

您可以使用与Canvas混合的 Android 的BitmapDrawable类,并尝试以下代码段中的内容:

public static Drawable mergeImage(Drawable orig, Drawable over, int left, int top) {
    Bitmap original = ((BitmapDrawable)orig).getBitmap();
    Bitmap overlay = ((BitmapDrawable)over).getBitmap();
    Bitmap result = Bitmap.createBitmap(original.getWidth(), original.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(result);
    Paint paint = new Paint();
    paint.setAntiAlias(true);

    canvas.drawBitmap(original, 0, 0, paint);
    canvas.drawBitmap(overlay, left, top, paint);

    return new BitmapDrawable(result);
}

我已经使用上面的行编写了一个覆盖有“在线状态”的照片图像网格视图。希望它也对你有用。

于 2012-06-17T11:11:54.050 回答
0

一种更通用的方法可能是使用您想要的PorterDuffMode创建一个PorterDuffXfermode,然后将其设置在您与画布一起使用的Paint对象上,如mthama 的答案中所引用但替换一些行。这使您可以根据需要使用其他 Porter-Duff 模式。

Paint paint = new Paint();
paint.setAntiAlias(true);
canvas.drawBitmap(original, 0, 0, paint);
paint.setXferMode(new PorterDuffXferMode(PorterDuff.Mode.OVERLAY));
canvas.drawBitmap(overlay, left, top, paint);

请注意,我还没有尝试过,所以请使用 mthama 的回答。:)

于 2012-06-17T13:10:23.813 回答