簡體   English   中英

Java-如何繪制圖形

[英]Java - how to draw Graphics

我嘗試環顧四周,但不明白如何在Java中繪制圖形。 讓我舉一個例子。

假設我想創建一個自定義方法來填充三角形,並且它需要三個點作為參數。 如果無法創建Graphics對象,如何使用方法fillPolygon(int [] xPoints,int [] yPoints,int nPoints)?

您需要在其上繪圖。 通常,這可以通過創建自己的組件(例如,擴展JPanel in swing)然后覆蓋那里的各種圖形更新方法來完成。 要實現的主要相關工具是paintComponent ,它獲取作為參數傳入的Graphics對象。

通常,您還可以將Graphics對象轉換為Graphics2D ,這將為您提供更加豐富的繪圖基元集。

首先,您應該了解(也許您已經知道) Graphics是您寫入的位置 ,而不是您寫入的位置。 大多數情況下是計算機屏幕,例如使用Swing時。

您還可以通過寫入從BufferedImage.getGraphics獲得的Graphics來直接繪制為空圖像:

Image myImage = new BufferedImage(...);
Graphics graphImage = myImage.getGraphics();
graphImage.setColor(Color.BLUE);
graphImage.fillPolygon(...);  // set some blue pixels inside the BufferedImage

然后,您可以將該圖像轉換為任何圖像格式。

現在是一個愚蠢的示例,您不應該這樣做(有關真正的Swing過程,請參見下文):您可以在Swing組件中繪制圖像

public class MyJPanel extends Panel {

   @Override
   public void paintComponent(Graphics g) { // g is your screen
       ... 
       g.drawImage(myImage,...);  // draw your image to the screen
       ...
   }
}

標准的Swing過程是直接寫入屏幕:

public class MyJPanel extends Panel {

   @Override
   public void paintComponent(Graphics g) { // g is your screen
       ... 
       g.fillPolygon(...); // directly writes your pixels to the screen buffer
       ...
   }
}

(對nitpickers的評論:由於Swing是雙緩沖的,因此直接寫入屏幕緩沖區並不是完全正確。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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