libGDX:如何将纹理裁剪为圆形

4

我已通过这个链接实现了在Android开发中裁剪圆形区域的目标。

但我该如何在libGDX框架下实现呢?

我尝试使用Pixmap,但未能成功。

有人能帮助我实现吗?


需要更多关于你想要做什么的详细信息。是在纹理上添加静态遮罩?还是在纹理区域/精灵上添加?或者只是在像素图上添加?动态地遮罩屏幕上的某些元素?你需要能够将遮罩与图像分开移动并打开和关闭吗? - Tenfour04
@Tenfour04 感谢您回答我的问题,我尝试使用pixmap,因为我知道这个类可以实现我的目标,但是我失败了。而Shader可以做到,但我对它一无所知。这就是我在问题中的意思,我没有经验。所以,如果您能提供给我代码,我将非常感激。 - iibrahimbakr
1个回答

7

我不确定是否有更简单的方法,但是我创建了一种方法来处理掩码,并将掩码与原始像素图组合成一张结果像素图。

public void pixmapMask(Pixmap pixmap, Pixmap mask, Pixmap result, boolean invertMaskAlpha){
    int pixmapWidth = pixmap.getWidth();
    int pixmapHeight = pixmap.getHeight();
    Color pixelColor = new Color();
    Color maskPixelColor = new Color();

    Pixmap.Blending blending = Pixmap.getBlending();
    Pixmap.setBlending(Blending.None);
    for (int x=0; x<pixmapWidth; x++){
        for (int y=0; y<pixmapHeight; y++){
            Color.rgba8888ToColor(pixelColor, pixmap.getPixel(x, y));                           // get pixel color
            Color.rgba8888ToColor(maskPixelColor, mask.getPixel(x, y));                         // get mask color

            maskPixelColor.a = (invertMaskAlpha) ? 1.0f-maskPixelColor.a : maskPixelColor.a;    // IF invert mask
            pixelColor.a = pixelColor.a * maskPixelColor.a;                                     // multiply pixel alpha * mask alpha
            result.setColor(pixelColor);
            result.drawPixel(x, y);
        }
    }
    Pixmap.setBlending(blending);
}

只有alpha通道会在遮罩像素图上查看。它从遮罩中取样alpha,将其与原始像素图的alpha合并,然后将该值写入结果像素图。
在您的情况下,使用任何颜色在遮罩像素图上绘制一个填充的圆形,只要alpha为“1f”即可。然后结果像素图将是剪切成圆形的原始像素图。
注意:invertMaskAlpha布尔值允许您翻转遮罩的alpha通道。因此,如果您将此布尔值设置为“true”,则将从中剪切出圆形的原始像素图仅留下圆形外部的边缘。

太好了,你做到了。我将其绘制为“纹理”,使用你的方法,我使其返回“像素图”结果。非常感谢 :)。 - iibrahimbakr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接