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

Cro*_*wni 3 java bitmap libgdx

我通过 android 开发实现了我的目标,如此链接从 Android 中的位图裁剪圆形区域所示, 但是我如何使用 libGDX 框架实现这一目标?我试图做到这一点,Pixmap但没有成功。

任何人都可以帮助我实现这一目标。

Tek*_*rue 6

我不知道是否有更简单的方法,但我制作了一种使用蒙版并将蒙版与原始像素图组合成生成的像素图的方法。

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);
}
Run Code Online (Sandbox Code Playgroud)

在遮罩像素图上唯一看到的是 alpha 通道。它从掩码中采样 alpha 并将其与来自原始像素放大器的 alpha 组合,然后将值写入结果像素图。

在您的情况下,只要 alpha 为“1f”,就可以使用任何颜色在蒙版像素图上绘制一个实心圆圈。然后结果像素图将是您裁剪成圆形的原始像素图。

注意: “invertMaskAlpha”布尔值允许您翻转蒙版的 Alpha 通道。因此,如果您将此布尔值设置为“true”,您将拥有原始像素图,并从中切出圆圈,只留下圆圈外的边缘。