2015-12-13 71 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