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

时间:2015-12-13 20:50:12

标签: java bitmap libgdx

我通过Android开发实现了我的目标,如此链接所示Cropping circular area from bitmap in Android如何我能用libGDX框架实现这一目标吗? 我尝试用Pixmap来做,但没有成功。

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

1 个答案:

答案 0 :(得分:3)

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

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进行采样,并将其与原始pixamp中的alpha进行组合,然后将值写入结果pixmap。

在您的情况下,只要alpha为&#34; 1f&#34;,就可以用任何颜色在填充圆圈上绘制填充圆圈。然后结果像素图将是你的原始像素图裁剪成一个圆圈。

注意:&#34; invertMaskAlpha&#34; boolean允许您翻转蒙版的alpha通道。因此,如果将此布尔值设置为&#34; true&#34;你将得到你的原始像素图,其圆圈被切除,只剩下圆圈外的边缘。