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?
10
A
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
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);
}
Ricordarsi di disporre dell'originale Pixmap –
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
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