2012-09-22 14 views
10

私がしようとしているのは、ピックスマップをテクスチャに描画することによってゲームの背景イメージを生成することです。今のところ私はそれを行うことができますが、X軸またはY軸にフリップされたピクスマップをテクスチャに描画する必要があります。しかし、私はそうする何かを見つけることができません。 pixmapクラスはその機能を提供しません。それでテクスチャにフリップされたテクスチャ領域を描くことができると考えましたが、これまでのところどのようにしているのかわかりませんでした。だから私はどうやってこのようなことをすることができるのだろうと思っていた。それは他のJavaライブラリとpng画像を反転し、その反転画像からpixmapを作成することができるだろうか?ピクセルを反復する以外libgdxのテクスチャに描画するピクスマップを反転する方法は?

答えて

7

私はまた、他のオプションが表示されない:

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

元のPixmapを廃棄することを忘れないでください。 –

+2

Thx! Btwでは、代わりに 'flipped.drawPixel(x、y、src.getPixel(x、height - y - 1));'を実行するだけで、Y軸を反転したい場合は '。 – Sawny

+0

ピクスマップを90度回転させる必要がある場合に備えて、あなたのアイデアからインスピレーションを得た方法を作成しました。http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

は、ここで新しいピックスマップの作成を必要としないソリューションです。このコードは、画像の反対側のピクセルを交換する代わりに、ピクスマップ画像のコーナーを交換することによって、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); 
} 
関連する問題