2016-03-27 38 views
0

Ekranda belirli bir pikselin rengini bulmak istiyorum. JFrame'in arkaplanı, beyaz olan RGB'ye ayarlanır (255, 255, 255). Graphics nesnesi siyah olarak ayarlanmıştır, bu RGB'dir (0, 0, 0).Ekranda piksel rengi alınamıyor

Bir dikdörtgen çiziyorum. (100, 100), dikdörtgenin anahattında bir pikseldir.

Çizmeden önce, (100, 100) piksel rengini alıyorum ve RGB (255, 255, 255) değerini veriyor. Çizildikten sonra piksel rengini (100, 100) alır ve RGB (255, 255, 255) verir. RGB olması gerekmiyor mu (0, 0, 0)? Ayrıca, çıkış iki kez tekrar eder. Niye ya?

kodu:

public void paintComponent(Graphics g){ 
     Robot robot = null; 
     try { 
      robot = new Robot(); 
     } catch (AWTException e) { 
      e.printStackTrace(); 
     } 
     Color pixelColour; 
     g.setColor(Color.black); 
     pixelColour = robot.getPixelColor(100, 100); 
     System.out.println("Pixel colour at (100, 100) before drawing: " + pixelColour.toString()); 
     g.drawLine(100, 100, 100, 200); 
     g.drawLine(100, 200, 300, 200); 
     g.drawLine(300, 200, 300, 100); 
     g.drawLine(300, 100, 100, 100); 
     pixelColour = robot.getPixelColor(100, 100); 
     System.out.println("Pixel colour at (100, 100) after drawing: " + pixelColour.toString()); 
    } 
    public static void main(String[] args) 
    { 
     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.setBackground(Color.white); 
     frame.setVisible(true); 
    } 
} 

çıkışı:

Pixel colour at (100, 100) before drawing: java.awt.Color[r=255,g=255,b=255] 
Pixel colour at (100, 100) after drawing: java.awt.Color[r=255,g=255,b=255] 
Pixel colour at (100, 100) before drawing: java.awt.Color[r=255,g=255,b=255] 
Pixel colour at (100, 100) after drawing: java.awt.Color[r=255,g=255,b=255] 

cevap

0

robot belirli bir ekrana koordinat bir pixelcolor yakalar. Ekranınızın sol üst köşesinde bulunan kök. Penceren hakkında bir şey bilmiyor. Piksellerinizi ana bileşene göre çizersiniz. PixelColor bileşeninizin kaynağı, JFrame'inizin görüntüleme alanının sol üst köşesidir. Amacıyla ekranı SwingUtilities kullanabileceğiniz bir pikselin koordinatı almak için:

https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html#convertPointToScreen(java.awt.Point,%20java.awt.Component)

Point screenLocation = SwingUtilities.convertPointToScreen(new Point(100, 100), this); 
pixelColour = robot.getPixelColor(screenLocation.x, screenLocation.y); 

SwingUtilities.convertPointToScreen(point, component); 
Robot anda beyaz verir sebebi muhtemelen sadece bir tesadüftür.

Ayrıca, Swing iki kez aramaya karar verdiği için kodunuz iki kez de çalışıyor. Swing, bileşenlerin yeniden çizilmesi gerektiğini düşünüyorsa, örneğin yeniden boyutlandırırken paintComponent öğesini çağırır. Bununla ilgili hiçbir şey yapamazsın.