2015-12-13 37 views
0

我实现了我与Android的发展目标,如在这个环节Cropping circular area from bitmap in Android我怎么能做到这一点与libGDX框架? 我试图用Pixmap做到这一点,但没有成功与我。libGDX:我怎样才能裁剪纹理为圆

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

+0

需要更多关于你想要做什么的细节。添加静态掩码到纹理?或纹理区域/精灵?或者只是一个Pixmap?动态屏蔽屏幕上的某些元素?你是否需要能够将图像与图像分开移动并打开和关闭? – Tenfour04

+0

@ Tenfour04 Thanx为你回答我的问题,我试图使用pixmap,因为我知道这个班可以ahcieve我的目标,但我失败了。和“着色器”可以做到,但我对此一无所知。这是我的意思,在我的问题中,我没有经验。所以,如果你能提供我的代码,我会感谢你。 – Crowni

回答

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); 
} 

在面具pixmap上唯一看到的是alpha通道。它从掩码中对alpha进行采样,并将其与原始pixamp中的alpha相结合,然后将值写入结果pixmap。

就你而言,只要alpha是“1f”,就可以用任何颜色在面具pixmap上绘制一个实心圆。然后,结果像素图将被裁剪成圆形的原始像素图。

注意:“invertMaskAlpha”布尔允许您翻转蒙版的alpha通道。所以如果你把这个布尔值设置为“true”,你将得到你的原始像素图,并将其中的圆圈剪掉,只剩下圆圈外的边缘。

+0

就是这样你做到了。我把它作为'Texture'绘制出来,你的方法使它返回'Pixmap'结果。谢谢A Lot :)。 – Crowni