Android动态位图掩码

Android动态位图掩码,android,dynamic,bitmap,mask,Android,Dynamic,Bitmap,Mask,我有这样的图像: 我还有一个α值,它的范围是[0,π]。本质上,它代表了可视角度 我想对图像应用动态透明遮罩,因此如果α等于π/2,则只有左半部分可见 我想到了计算每个像素可见性的过程: private boolean[][] getVisibilityArray(final int height, final int width, final double value) { final boolean[][] visibility = new boolean[width][heigh

我有这样的图像:

我还有一个α值,它的范围是[0,π]。本质上,它代表了可视角度

我想对图像应用动态透明遮罩,因此如果α等于π/2,则只有左半部分可见

我想到了计算每个像素可见性的过程:

private boolean[][] getVisibilityArray(final int height, final int width, final double value) {

    final boolean[][] visibility = new boolean[width][height];
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            final double xInSqrt = (width / 2) - x;
            final double yInSqrt = height - y;
            final double sumInSqrt = xInSqrt * xInSqrt + yInSqrt * yInSqrt;
            final double hipotenusa = Math.sqrt(sumInSqrt);
            final double adyacente = Math.abs((width / 2) - x);
            final double cos = adyacente / hipotenusa;
            double angle = Math.acos(cos);
            if (x > width / 2) {
                angle = Math.PI - angle;
            }
            visibility[x][y] = angle <= value;
        }
    }
    return visibility;
}
但是,生成位图并将掩码应用于原始位图超出了我的理解范围


我怎样才能达到这个效果呢?

最后,答案比我最初想象的要明显得多

final boolean[][] visibility = getVisibilityArray(currentGauge.getHeight(),
                    currentGauge.getWidth(), angle);
final Bitmap clone = Bitmap.createBitmap(currentGauge.getWidth(),
                    currentGauge.getHeight(), Config.ARGB_8888);
for (int y = 0; y < currentGauge.getHeight(); y++) {
    for (int x = 0; x < currentGauge.getWidth(); x++) {
        if (!visibility[x][y]) {
            clone.setPixel(x, y, 0);
        } else {
            clone.setPixel(x, y, currentGauge.getPixel(x, y));
        }
    }
}

克隆包含所需的位图。没有遮罩,只需将不需要的像素设置为0 0x00000000,不透明度为0%黑色,这样它们就会变得透明。

感谢您回到这里并发布答案。