Метод BufferedImage.getRGB не соответствует - Java AWT - PullRequest
1 голос
/ 30 марта 2012

Я пишу небольшую игру, используя Апплет.Я хочу иметь возможность проверить цвет пикселя на экране.Однако, когда я использую .getRGB () для моего буферизованного изображения в игровом цикле (цикл while, который выполняется снова и снова), он дает мне непоследовательные значения, даже если цвет пикселя фактически никогда не изменяется!

Например,, если я заливаю изображение зеленым цветом и вызываю .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);
    }
}

1 Ответ

1 голос
/ 30 марта 2012

Я не уверен, почему вы имеете дело с буферами. Это окрашивает изображение в зеленый цвет и не выводит ничего в командной строке (сообщая о черном цвете).

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

Примечания * * 1004 Для компиляции и запуска prompt> javac t.java prompt> appletviewer t.java // yes that file extension is correct. размер Размер апплета устанавливается в HTML, который его загружает, он не должен пытаться устанавливать свой собственный размер.

...