[英]BufferedImage.getRGB method not consistent - Java AWT
我正在使用Applet編寫小型游戲。 我希望能夠檢查屏幕上像素的顏色。 但是,當我在游戲循環(一遍又一遍執行的while循環)中對緩沖的圖像使用.getRGB()時,即使像素顏色從未真正改變,它也會給我帶來不一致的值!
例如,如果我用綠色填充圖像,然后在屏幕中間的像素上調用.getRGB(),有時它會給我0xFF00FF00(綠色)作為顏色,有時它會給我0xFF000000(黑色),即使顏色始終保持綠色!
有什么幫助嗎?
這是相關的代碼(如果有幫助的話),我將其最小化只是為了關注該問題:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class t extends Applet implements Runnable {
Graphics2D bufferG;
BufferedImage bufferI;
final int WIDTH = 500, HEIGHT = 500;
public void init() {
setSize(WIDTH, HEIGHT);
bufferI = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
bufferG = bufferI.createGraphics();
(new Thread(this)).start();
}
public void run() {
while (true){
if (bufferI.getRGB(WIDTH/2, HEIGHT/2)==0xFF000000) System.out.println("BLACK");
}
}
public void paint(Graphics g) {
bufferG.setColor(Color.green);
bufferG.fillRect(0, 0, WIDTH, HEIGHT);
g.drawImage(bufferI, 0, 0, this);
}
}
我不確定為什么要處理緩沖區。 這會將圖像繪制為綠色,並且在命令行上不產生任何輸出(將顏色報告為黑色)。
// <applet code='t' width=400 height=200></applet>
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class t extends Applet implements Runnable {
BufferedImage bufferI;
final int WIDTH = 500, HEIGHT = 500;
public void init() {
bufferI = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = bufferI.getGraphics();
g.setColor(Color.GREEN);
g.fillRect(0,0,WIDTH,HEIGHT);
g.dispose();
(new Thread(this)).start();
}
public void run() {
while (true){
if (bufferI.getRGB(WIDTH/2, HEIGHT/2)==0xFF000000) System.out.println("BLACK");
}
}
public void paint(Graphics g) {
g.drawImage(bufferI, 0, 0, this);
}
}
prompt> javac t.java
prompt> appletviewer t.java // yes that file extension is correct.
小應用程序的大小是在加載它的HTML中設置的,不應嘗試設置自己的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.