2016-03-27 36 views
1

Bir BufferedImage'da bir pikselin rengini almak istiyorum. BufferedImage'ın arka planını beyaza ayarlıyorum ve BufferedImage'da (100, 100) - (100, 200) arası bir çizgi çiziyorum. Sonra BufferedImage'ı bir JPanel üzerine çiziyorum. Hat var ama arka plan beyaz değil. Niye ya?Bir BufferedImage üzerinde pikselin rengini alın

Ayrıca getRGB yöntemi, getRGB olmasa bile R, G ve B için 0 değerini döndürür (100, 100). Yanlış olan ne?

kodu:

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

Bu yanıt derdin ne yazdırır ?? http://stackoverflow.com/questions/36246988/cannot-get-colour-of-pixel-on-screen – gpasch

+0

@gpasch Bir Robot yerine BufferedImage kullanarak yapmaya çalışıyorum. – Saiyan

cevap

4

gbi.setBackground(Color.white) sonra gbi.clearRect(0,0,bi.getWidth(), bi.getHeight());

clearRect() eklemek resmin üzerine arka plan rengini boyar. Yeni bir arka plan rengini ayarladıysanız, görüntüyü değiştirmez.

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

Bu

255 255 255 
255 255 255 
+0

Sorun o zaman arka planın görünmüyor olmasından mıydı? Bu da çalışır: gbi.setColor (Color.white) '' gbi.setBackground (Color.white) 'yerine gbi.clearRect (0, 0, 500, 500)' ve ardından gbi.clearRect (0) , 0, 500, 500). – Saiyan