使用漸變填充繪製線條
在trashgod的尖端我試圖填充的形狀與一個梯度有尖銳的邊緣,以模擬線路圖。這會阻止很多計算,並且可能會更簡單。對於粗線來說它工作得很好,但對於更細的線不適用。使用原始圖形
雖然簡單,它沒有我的情況下工作
rect.setSpace(spaceBetweenLines);
Color bg = Color.YELLOW;
Color fg = Color.BLUE;
rect.setPaint(new LinearGradientPaint(
(float) startX, (float) startY, (float) (startX + spaceBetweenLines), (float) (startY + spaceBetweenLines),
new float[] {0,.1f,.1001f}, new Color[] {fg,fg,bg}, MultipleGradientPaint.CycleMethod.REPEAT)
);

畫線:使用下面的代碼產生填寫的第一個畫面。更精細的,但對我來說,更自然的方式,只是在形狀(矩形,圓形,...)上繪製線條。以下代碼用於生成第二個圖像。注意使用clip(Shape s)
將線條繪製限制在下面的形狀中。不簡單畫一個矩形並使用clip()
來限制形狀的原因是clip()
操作不是別名,因此產生鋸齒。因此,我必須首先繪製形狀以獲得平滑邊緣,然後設置剪輯以防止即將出現的線條圖中出現溢出,最後繪製線條。
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(getBackground());
g2.fill(getShape());
g2.setClip(getShape());
// draw diagonal lines
g2.setPaint(getLineColor());
for (int x = (int) this.x, y = (int) (this.y); y - height < (this.y + height + getSpace());) {
g2.drawLine(x, y , x + (int) width , y - (int) width);
y += getSpace();
}

你想在圖表的酒吧或背景這種模式? – trashgod
我想繪製酒吧,而不是背景。 – oligofren