2015-12-13 5 views
0

Я достиг своей цели с андроида развития, как показано в этой ссылке Cropping circular area from bitmap in Android но как я могу добиться того, что с рамках libGDX? Я попытался сделать это с Pixmap, но не смог со мной.libGDX: Как я могу обрезать текстуры как круг

Любой может помочь мне достичь этого.

+0

Нужна более подробная информация о том, что именно вы пытаетесь сделать. Добавить статическую маску в текстуру? Или область текстуры/спрайт? Или просто Pixmap? Динамически маскировать определенные элементы на экране? Вам нужно иметь возможность перемещать маску отдельно от изображения и включать и выключать его? – Tenfour04

+0

@ Tenfour04 Thanx для ответа на мой вопрос, я попытался использовать pixmap, потому что я знаю, что этот класс может подтвердить мою цель, но я потерпел неудачу. и «Shader» может это сделать, но я ничего не знаю об этом. это я имею в виду в моем вопросе, у меня не было опыта. поэтому, если вы можете предоставить мне код, я буду благодарен u. – Crowni

ответ

3

Я не знаю, есть ли более простой способ, но я создал метод для работы с масками и комбинирования маски с исходной pixmap в результирующую 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); 
} 

Единственное, что посмотрело на маску pixmap, - это альфа-канал. Он отображает альфу из маски и объединяет ее с альфой из исходного пикселя, затем записывает значение в пиксельную карту результата.

В вашем случае нарисуйте заполненный круг на маске pixmap любым цветом, если альфа «1f». Тогда результат pixmap будет вашим исходным pixmap, обрезанным по кругу.

ПРИМЕЧАНИЕ: «invertMaskAlpha» boolean позволяет вам переворачивать альфа-канал маски. Поэтому, если вы установите для этого логического значения значение «true», у вас будет оригинальная pixmap с вырезанным из него кругом, оставив только края за пределами круга.

+0

Вот и все. Я рисую его как «Текстура», который ваш метод, который я делаю, возвращает результат «Pixmap». Спасибо большое :). – Crowni

Смежные вопросы