2012-09-22 42 views
10

Entonces, lo que estoy tratando de hacer es generar una imagen de fondo para mi juego dibujando pixmaps a una textura. Hasta ahora puedo hacerlo, pero ahora necesito dibujar los pixmaps invertidos en el eje X o Y a la textura. Sin embargo, no puedo encontrar nada que hacer. La clase pixmap no proporciona esa funcionalidad. Entonces pensé que podría dibujar una región de textura invertida en una textura, pero hasta ahora no he encontrado cómo hacerlo. Entonces me preguntaba cómo puedo hacer tal cosa, ¿sería posible voltear una imagen png con otras bibliotecas java y luego crear un mapa de píxeles a partir de esa imagen volteada?cómo voltear un mapa de puntos para dibujar una textura en libgdx?

Respuesta

7

Asimismo, no veo otra opción excepto para recorrer los píxeles:

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

Recuerda desechar el Pixmap original –

+2

Thx! Por cierto, si quieres voltear el eje Y en su lugar, simplemente haces 'flipped.drawPixel (x, y, src.getPixel (x, height - y - 1));'. – Sawny

+0

En caso de que necesite rotar un mapa de píxeles 90 grados: he creado un método para hacer esto inspirado en su idea, vea http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

he aquí una solución que no requiere la creación de un nuevo mapa de puntos. Este código también se puede modificar para voltear un Pixmap horizontal y verticalmente intercambiando esquinas de una imagen de mapa de bits en lugar de intercambiar píxeles en lados opuestos de la imagen.

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