2012-09-22 12 views
10

Quindi quello che sto cercando di fare è generare un'immagine di sfondo per il mio gioco disegnando pixmaps su una texture. Finora posso farlo, ma ora ho bisogno di disegnare le pixmap capovolte nell'asse X o Y nella trama. Tuttavia non riesco a trovare nulla per farlo. La classe pixmap non fornisce questa funzionalità. Poi ho pensato che avrei potuto disegnare una regione di texture capovolta su una texture, ma finora non ho trovato il modo di farlo. Quindi mi stavo chiedendo come posso fare una cosa del genere, sarebbe possibile capovolgere un'immagine png con altre librerie java e quindi creare una pixmap da quella immagine capovolta?come capovolgere una pixmap per disegnare su una trama in libgdx?

risposta

7

anche io non vedo altra scelta se non per iterare i pixel:

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

Ricordarsi di disporre dell'originale Pixmap –

+2

Thx! A proposito, se si vuole capovolgere l'asse Y, invece, si esegue semplicemente 'flipped.drawPixel (x, y, src.getPixel (x, height - y - 1));'. – Sawny

+0

Nel caso in cui sia necessario ruotare una pixmap di 90 gradi: ho creato un metodo per farlo ispirato alla tua idea, vedi http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

Ecco una soluzione che non richiede la creazione di una nuova Pixmap. Questo codice può anche essere modificato per capovolgere una Pixmap orizzontalmente e verticalmente scambiando gli angoli di un'immagine pixmap invece di scambiare i pixel sui lati opposti dell'immagine.

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