2012-09-22 10 views
10

Yapmaya çalıştığım şey, pixmap'leri bir dokuya çizerek oyunum için bir arka plan görüntüsü oluşturmaktır. Şimdiye kadar bunu yapabilirim, ama şimdi X veya Y ekseninde çevrilmiş pixmap'leri dokuya çizmem gerekiyor. Ancak bunu yapacak bir şey bulamıyorum. Pixmap sınıfı bu işlevselliği sağlamıyor. Sonra bir dokuya çevrilmiş bir doku bölgesi çizebileceğimi düşündüm, ama şimdiye kadar bunu nasıl yapacağımı bulamadım. Bu yüzden böyle bir şeyi nasıl yapabileceğimi merak ettim, diğer java kütüphaneleriyle bir png görüntüsünü çevirmek ve sonra çevrilmiş görüntüden bir piksel haritası oluşturmak mümkün olabilir mi? pikselleri yineleme dışındalibgdx'te bir dokuya çizmek için bir piksoma nasıl çevrilir?

cevap

7

Ben de başka bir seçenek görmüyorum:

public Pixmap flipPixmap(Pixmap src) { 
    final int width = src.getWidth(); 
    final int height = src.getHeight(); 
    Pixmap flipped = new Pixmap(width, height, src.getFormat()); 

    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      flipped.drawPixel(x, y, src.getPixel(width - x - 1, y)); 
     } 
    } 
    return flipped; 
} 
+0

Orijinal Pixmap –

+2

Thx! Btw, Y eksenini çevirmek istiyorsanız, sadece 'flipped.drawPixel (x, y, src.getPixel (x, height - y - 1)); – Sawny

+0

Sadece bir pixmap'i 90 derece döndürmeniz gerekiyorsa: Fikrinizden ilham almak için bir yöntem oluşturdum, bkz. Http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

İşte yeni pixmap oluşturulmasını gerektirmeyen bir çözüm. Bu kod, görüntünün karşıt taraflarındaki pikselleri değiştirmek yerine bir piksel haritası görüntüsünün köşelerini değiştirerek bir Pixmap'ı yatay ve dikey olarak çevirmek için de değiştirilebilir.

public static void flipPixmap(Pixmap p){ 
    int w = p.getWidth(); 
    int h = p.getHeight(); 
    int hold; 

    //change blending to 'none' so that alpha areas will not show 
     //previous orientation of image 
    p.setBlending(Pixmap.Blending.None); 
    for (int y = 0; y < h/2; y++) { 
     for (int x = 0; x < w/2; x++) { 
      //get color of current pixel 
      hold = p.getPixel(x,y); 
      //draw color of pixel from opposite side of pixmap to current position 
      p.drawPixel(x,y, p.getPixel(w-x-1, y)); 
      //draw saved color to other side of pixmap 
      p.drawPixel(w-x-1,y, hold); 
      //repeat for height/width inverted pixels 
      hold = p.getPixel(x, h-y-1); 
      p.drawPixel(x,h-y-1, p.getPixel(w-x-1,h-y-1)); 
      p.drawPixel(w-x-1,h-y-1, hold); 
     } 
    } 
    //set blending back to default 
    p.setBlending(Pixmap.Blending.SourceOver); 
} 
İlgili konular