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

标签 java bitmap libgdx

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

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

最佳答案

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

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 channel 。它对掩码中的 alpha 进行采样,并将其与原始像素放大器中的 alpha 相结合,然后将值写入结果像素图。

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

注意:“invertMaskAlpha” boolean 值允许您翻转蒙版的 Alpha channel 。因此,如果您将此 boolean 值设置为“true”,您将获得原始像素图,其中圆圈被切掉,仅留下圆圈外的边缘。

关于java - libGDX:如何将纹理裁剪为圆形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256170/

相关文章:

java - 圆-圆碰撞预测(后续)

java - 获取xsi的值:noNamespaceSchemaLocation (XPATH)

java - 将java位图像素传递给jni的最快方法

java - setWebViewClient 错误 - someView 中的 someView(context) 无法应用于 ()

android - setImageResource 内存不足错误

android - 位图压缩和异步任务保存期间的问题

java - LibGdx - 默认代码的 NullPointerException

java - 为什么这个 if 语句不能正确运行

java - 比较 Java 8 中的日期和 LocalDateTime

java - PDF文件的密码保护