在android中两个位图之间淡入淡出的最佳方法

时间:2014-02-13 11:59:54

标签: android bitmap transparency rgb fade

我有两个位图,即bm1和bm2,我想创建(尽可能快)另一个位图,它是bm1和bm2之间的衰落混合,其中bm1用weight和bm2加权1-weight

我目前的实施如下:

private Bitmap Fade(Bitmap bm1, Bitmap bm2, double weight)
{
    int width = bm1.getWidth();
    int height = bm1.getHeight();

    if (width != bm2.getWidth() || height != bm2.getHeight())
        return null;

    Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    for (int y = 0; y < height; y++)
        for (int x = 0; x < width; x++)
        {
            int pix_s = bm1.getPixel(x, y);
            int pix_d = bm2.getPixel(x, y);

            int r_s =  (pix_s >> 16) & 0xFF;
            int g_s = (pix_s >> 8) & 0xFF;
            int b_s = pix_s & 0xFF;

            int r_d =  (pix_d >> 16) & 0xFF;
            int g_d = (pix_d >> 8) & 0xFF;
            int b_d = pix_d & 0xFF;

            int r = (int)((1-weight) * r_s + weight * r_d);
            int g = (int)((1-weight) * g_s + weight * g_d);
            int b = (int)((1-weight) * b_s + weight * b_d);
            int pix = 0xff000000 | (r << 16) | (g << 8) | b;
            bm.setPixel(x, y, pix);
        }
    return bm;  
}

如您所见,它只是通过bm1和bm2中像素的相应RGB分量之间的插值来设置生成图像的每个像素的RGB分量。

但是,此功能非常慢,因为它会扫描两个输入位图的所有像素 是否有更有效的方法来做同样的事情?
例如,通过某种方式对透明度属性进行操作?

1 个答案:

答案 0 :(得分:1)

Here它向您展示了如何更改位图的不透明度,它会更改RGB颜色的Alpha通道。 和Here它向您展示如何在画布中叠加两个位图