2016-03-27 4 views
1

Я хочу получить цвет пикселя на BufferedImage. Я установил фон BufferedImage на белый, и я нарисую строку из (100, 100) в (100, 200) в BufferedImage. Затем я рисую BufferedImage на JPanel. Есть линия, но фон не белый. Зачем?Получить цвет пикселя на BufferedImage

Кроме того, метод getRGB возвращает 0 для R, G и B, даже если это не getRGB (100, 100). Что не так?

Код:

public class PixelColour extends JPanel{ 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB); 
     Graphics2D gbi = bi.createGraphics(); 
     gbi.setColor(Color.black); 
     gbi.setBackground(Color.white); 
     gbi.drawLine(100, 100, 100, 200); 
     g2.drawImage(bi, null, 0, 0); 
     int rgb = bi.getRGB(100, 100); 
     int red = (rgb >> 16) & 0xFF; 
     int green = (rgb >> 8) & 0xFF; 
     int blue = (rgb & 0xFF); 
     System.out.println(red + " " + green + " " + blue); 
    } 

    public static void main(String[] args) throws IOException{ 
     PixelColour pc = new PixelColour(); 
     JFrame frame = new JFrame("Pixel colour"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(pc); 
     frame.setSize(500,500); 
     frame.setVisible(true); 
    } 
} 
+0

, что случилось с этим ответом ?? http://stackoverflow.com/questions/36246988/cannot-get-colour-of-pixel-on-screen – gpasch

+0

@gpasch Я пытаюсь сделать это, используя BufferedImage вместо Robot. – Saiyan

ответ

4

После gbi.setBackground(Color.white) добавить gbi.clearRect(0,0,bi.getWidth(), bi.getHeight());

clearRect() краски цвет фона на изображение. Если вы просто установите новый цвет фона, это не изменит изображение.

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 
    BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D gbi = bi.createGraphics(); 
    gbi.setColor(Color.black); 
    gbi.setBackground(Color.white); 

    // here 
    gbi.clearRect(0, 0, bi.getWidth(), bi.getHeight()); 

    gbi.drawLine(100, 100, 100, 200); 
    g2.drawImage(bi, null, 0, 0); 
    int rgb = bi.getRGB(50, 50); // off the black line 
    int red = (rgb >> 16) & 0xFF; 
    int green = (rgb >> 8) & 0xFF; 
    int blue = (rgb & 0xFF); 
    System.out.println(red + " " + green + " " + blue); 
} 

Печатается

255 255 255 
255 255 255 
+0

Проблема тогда в том, что фон не появлялся? Это также работает: 'gbi.setColor (Color.white)', за которым следует 'gbi.fillRect (0, 0, 500, 500)' вместо 'gbi.setBackground (Color.white)', за которым следует 'gbi.clearRect (0 , 0, 500, 500). – Saiyan

Смежные вопросы