2012-09-22 9 views
10

Więc próbuję zrobić to wygenerować obraz tła dla mojej gry, rysując pixmapy do tekstury. Do tej pory mogę to zrobić, ale teraz muszę narysować pixmapy odwrócone w osi X lub Y do tekstury. Jednak nie mogę znaleźć niczego, aby to zrobić. Klasa pikseli nie zapewnia tej funkcjonalności. Wtedy pomyślałem, że mogę narysować odwrócony region tekstury na teksturę, ale jak dotąd nie znalazłem, jak to zrobić. Tak więc zastanawiałem się, jak mogę zrobić coś takiego, czy byłoby możliwe przeniesienie obrazu png do innych bibliotek java, a następnie utworzenie pixmapy z tego odwróconego obrazu?jak odwrócić pixmapę, aby narysować teksturę w libgdx?

Odpowiedz

7

ja również nie widzę innego wyjścia oprócz iteracyjne piksele:

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

Pamiętaj, aby usunąć oryginalny Pixmap –

+2

Thx! Btw, jeśli chcesz odwrócić oś Y, zamiast tego po prostu wykonaj 'flipped.drawPixel (x, y, src.getPixel (x, height - y - 1));'. – Sawny

+0

Na wypadek, gdybyś chciał obrócić pixmapę o 90 stopni: Stworzyłem metodę inspiracji Twoim pomysłem, zobacz http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

Oto rozwiązanie, które nie wymaga tworzenia nowego Pixmap. Kod ten można również zmodyfikować, aby odwrócić mapę w pionie i poziomie, zamieniając rogi obrazu pikselowego zamiast zamieniać piksele po przeciwnych stronach obrazu.

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