繪製多邊形時,Java2D會留下右邊和底邊。我明白爲什麼這樣做。不過,我想繪製一些包含這些邊緣的東西。發生在我身上的一件事是用fillPolygon
與drawPolygon
以相同的座標,但這似乎留下一個空白。 (查看底部的小三角形圖像。)有兩種可能性,但我無法分辨出是哪種。要啓用抗鋸齒,我這樣做:Java Graphics.fillPolygon:如何渲染右邊和底邊?
renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
renderHints.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHints(renderHints);
一種可能性是,抗混疊不被Alpha通道完成的,所以差距是透支造成的。在這種情況下,如果alpha通道是反混淆的,那麼邊緣會正確對接。另一種可能性是這裏有一個缺口。
我該如何解決這個問題?
此外,我不確定,但看起來多邊形輪廓可能實際上太大了。也就是說,它可能會比我想包含的右邊和底邊更遠。
謝謝。
- 更新 -
基於對鰻魚的氣墊船全一個很不錯的建議,我已經做了編譯例如:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class polygon {
private static final int WIDTH = 20;
public static void main(String[] args) {
BufferedImage img = new BufferedImage(WIDTH, WIDTH, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = img.createGraphics();
int[] xPoints = {WIDTH/3, (2*WIDTH)/3, WIDTH/3};
int[] yPoints = {0, WIDTH/2, WIDTH};
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.green);
g2.drawLine(0, WIDTH-1, WIDTH, WIDTH-1);
g2.drawLine(0, 0, WIDTH, 0);
g2.drawLine(WIDTH/3, 0, WIDTH/3, WIDTH);
g2.drawLine((2*WIDTH/3), 0, (2*WIDTH/3), WIDTH);
g2.setColor(Color.black);
g2.drawPolygon(xPoints, yPoints, xPoints.length);
g2.setColor(Color.black);
g2.fillPolygon(xPoints, yPoints, xPoints.length);
g2.dispose();
ImageIcon icon = new ImageIcon(img);
JLabel label = new JLabel(icon);
JOptionPane.showMessageDialog(null, label);
}
}
如果離開填充多邊形紅色,你會看到下面的圖片(放大500%),這表明多邊形不會一直延伸到右邊緣。也就是說,垂直綠線對應於x=(2*WIDTH)/2
,儘管紅色多邊形包含該座標,但它不會在那裏繪製任何像素。
要看到差距的問題,我在節目改變red
到black
。在這張圖片中,您可以在右下方看到一個細微的間隙,其中由drawPolygon
繪製的輪廓與fillPolygon
繪製的輪廓不完全吻合。
謝謝。我根據要求擴充了我的問題。此外,非常好的簡短例子,你在那裏。我將不得不保持這種狀態。如果我不得不自己做這件事,那麼我的無知會得到更多的代碼。 –
+1'ImageIcon'! – trashgod