当前位置: 首页 > 面试题库 >

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

齐财
2023-03-14
问题内容

我通过android开发实现了我的目标,如该链接所示:[从Android中的位图裁剪圆形区域,](http://codingdict.com/questions/148437 但是 如何
使用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通道。它从蒙版中采样alpha并将其与原始pixamp中的alpha合并,然后将值写入结果pixmap中。

在您的情况下,只要Alpha为“ 1f”,就可以用任何颜色在面具像素图上绘制一个实心圆。然后,结果像素图将是您原来的像素图,并被裁剪为一个圆。

注意: “ invertMaskAlpha”布尔值使您可以翻转蒙版的Alpha通道。因此,如果将此布尔值设置为“
true”,您将拥有原始像素图,其中的圆被切掉,仅边缘在圆外。



 类似资料:
  • 我正在使用SurfaceView通过GLES将相机预览渲染到屏幕上。是否可以在下面的方法中裁剪纹理,然后再进行渲染?我想裁剪一个16:9的纹理,在屏幕上显示为4:3。

  • 问题内容: 请提供有关如何在椭圆形或圆形上进行裁剪的想法。请分享您的想法。 问题答案: 通过增加半径,它将变得更圆滑。 只要图像是正方形,就可以通过将宽度的一半作为拐角半径来获得一个完美的圆: 您还需要添加 斯威夫特4.2

  • 如果我创建一个.png 1024 x 1024的纹理,并在中间画一个124 x 124的圆,它的周围将是空的,它使用的RAM是否与我在124x124空间上画一个124 x 124的圆相同?

  • 我在寻找过去的一天,我没有成功。 我从API获取图像,并使用以下代码将其下载到位图文件。 我得到一个正方形的图像,我想裁剪四个角,使其成为圆形图像。有没有可能实现的方法? 欢迎任何相关答案。提前谢谢。

  • 问题内容: 我知道这应该很简单,但不会裁剪图像 我得到的图像宽为 1950像素 ,需要通过父对象的宽度进行裁剪。但是不会裁剪图像。我需要在布局中做什么才能仅显示前 400个像素 ,例如,无论屏幕/父级宽度是多少 对不起,一个简单的问题-尝试使用Google-仅存在复杂的问题。我是新手,所以请不要投票) 如果唯一的方法是以编程方式对其进行裁剪-请通过一种方法给我一个建议 问题答案: 好吧,我将评论粘

  • 问题内容: 我有一个位图,我想从该位图裁剪一个圆形区域。圆外的所有像素均应透明。我怎样才能做到这一点? 问题答案: 经过长时间的头脑风暴,我找到了解决方案