Как перевернуть pixmap для рисования текстуры в libgdx?

Итак, я пытаюсь создать фоновое изображение для своей игры, рисуя pixmaps в текстуру. Пока я могу это сделать, но теперь мне нужно нарисовать пиксельные карты, перевернутые по оси X или Y текстуре. Однако я не могу ничего найти. Класс pixmap не обеспечивает эту функциональность. Затем я подумал, что могу нарисовать область текстуры с перевернутыми текстурами, но пока я не нашел, как это сделать. Поэтому мне было интересно, как я могу это сделать, можно ли перевернуть png-образ с другими java-библиотеками, а затем создать pixmap из этого перевернутого изображения?

Ответ 1

Я также не вижу другого параметра, кроме как итерации пикселей:

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

Ответ 2

Вот решение, которое не требует создания нового Pixmap. Этот код также можно изменить, чтобы переворачивать Pixmap горизонтально и вертикально, заменяя углы изображения pixmap вместо замены пикселей на противоположных сторонах изображения.

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