【问题标题】:libGDX: How can I crop Texture as a circlelibGDX:如何将纹理裁剪为圆形
【发布时间】:2015-12-13 20:50:12
【问题描述】:

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

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

【问题讨论】:

  • 需要更多关于您正在尝试做什么的详细信息。向纹理添加静态蒙版?还是纹理区域/精灵?还是只是一个像素图?动态屏蔽屏幕上的某些元素?您是否需要能够将遮罩与图像分开移动并打开和关闭?
  • @Tenfour04 感谢您回答我的问题,我尝试使用 pixmap,因为我知道这门课可以实现我的目标,但我失败了。 Shader 可以做到,但我对此一无所知。这就是我的意思,我没有经验。所以,如果你能提供我的代码,我会感谢你。

标签: java bitmap libgdx


【解决方案1】:

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

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 相结合,然后将值写入结果像素图。

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

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

【讨论】:

  • 就是你做的。我把它画成Texture 你的方法我让它返回Pixmap 结果。非常感谢:)。
猜你喜欢
  • 2016-05-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多