簡體   English   中英

BufferedImage.getRGB方法不一致-Java AWT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM