how to flip a pixmap to draw to a texture in libgdx?

前端 未结 2 615
甜味超标
甜味超标 2020-12-19 00:41

So what I\'m trying to do is to generate a background image for my game by drawing pixmaps to a texture. So far I can do that, but now I need to draw the pixmaps flipped in

相关标签:
2条回答
  • 2020-12-19 01:01

    I also don't see other option except to iterate the pixels:

    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 讨论(0)
  • 2020-12-19 01:10

    Here's a solution that doesn't require the creation of a new Pixmap. This code can also be modified to flip a Pixmap horizontally and vertically by swapping corners of a pixmap image instead of swapping pixels on opposite sides of the image.

    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);
    }
    
    0 讨论(0)
提交回复
热议问题