Graphics で XOR モードを使用して、フラットな背景に対してカラーで 1 ビット テクスチャを描画しようとしたときに、Graphics で理解できない動作に遭遇しました。
これは、私が意味することの例です。
package teststuff;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class XORTest extends JFrame {
public XORTest() {
super("Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 400);
setIgnoreRepaint(true);
setResizable(false);
setVisible(true);
createBufferStrategy(2);
Graphics graphics = getBufferStrategy().getDrawGraphics();
graphics.setColor(Color.black);
graphics.fillRect(0, 0, getWidth(), getHeight());
graphics.setColor(Color.green);
graphics.fillRect(30, 40, 100, 200);
graphics.setXORMode(Color.white); // (*)
graphics.fillRect(60, 80, 100, 200);
graphics.dispose();
getBufferStrategy().show();
}
public static void main(String[] args) {
XORTest test = new XORTest();
}
}
(*) でマークされた行のコメントを外すと、期待どおりに 2 つの緑色の四角形が描画されます。そのままにしておくと、コンポーネントには何も描画されず、事前に描画された黒い背景や緑の四角形も描画されません。さらに奇妙なことに、一度は機能しました。以前は白ではなく Color.green の色を使用していました。変更後、期待どおりに描画されました。しかし、アプリケーションを閉じて再度起動すると、機能しなくなり、それ以降も機能しなくなりました。
これはJavaのバグですか?私のjreで?グラフィックスの文書化されていない動作? 私は Windows を使用しており、jdk7 で例を実行しています。
スクリーンショット: 3 つのリンクを投稿できないため、Imgur アルバム
3 番目のスクリーンショットは上記のコードです。1 番目は (*) がコメントされており、2 番目は 1 回の動作時の外観です (スクリーンショットを撮っていないため、GIMP で作成しました)。