我想画一些线条。问题是关于颜色。例如。我有几行红色,而且我画了一行蓝色(或反转)。有时,那些更多的线条对于最后一个线条是不透明的。
我尝试制作新的颜色并使用alpha复合材料设置颜色0.7 - 对于那些更多的线条,我保留一种颜色默认 - 不透明(alpha 1.0)。起初我绘制了更多的线条,而不是最后一条线条。但那条线“覆盖”那一条。有没有解决这个问题的解决方案?
我在玻璃窗上绘制那条线。
编辑 :该代码非常强大,因此很难发布,而且它是论文的一部分。 例如,原则是2色 Color basicColor; 颜色相似的颜色;
比我有绘画方法和2个哈希图作为属性 - 存储了一些点。 我迭代这张地图,记住一点和他相似,所有其他的连接 graphics2D.drawLine(x1,y1,x2,y2)然后改变颜色并用另一种颜色绘制最后一行。我也在修改中风,使其更显着。
我希望它足够......
的 EDIT2: 的 我有一些Point相似点比一些强大的绘画方法,这里是图形修改 迭代器遍历点列表列表。
Point similar = null;
Iterator<Point> secondIterator;
graphics.setColor(colorOfSimilar);
while (iterator.hasNext()) {
Point point = iterator.next();
if (point.equals(similarPoint)) {
similar = similarPoint;
} else {
secondIterator = secondMap.get(point).iterator();
while (secondIterator.hasNext()) {
Point secondPoint = secondIterator.next();
graphics2D.drawLine(point.getX(), point.getY(),
secondPoint.getX(), secondPoint.getY());
}
}
}
if (similar != null) {
secondIterator = secondMap.get(similar);
graphics2D.setColor(hooverColor);
graphics2D.setStroke(new BasicStroke(2.5f));
while (secondIterator.hasNext()) {
Point secondPoint = secondIterator.next();
graphics2D.drawLine(similar.getX(), similar.getY(),
secondPoint.getX(), secondPoint.getY());
}
graphics2D.setColor(colorOfSimilar);
graphics2D.setStroke(new BasicStroke(1.0f));
}
我在记事本中写了这么抱歉一些错误(我认为是括号等),但这是修改的机制,围绕这是迭代和其他的其他方法,但它并不重要。中风问题不存在,因为起初我没有中风。
感谢您的任何想法。
答案 0 :(得分:10)
结果取决于使用setComposite()
在图形上下文中指定的合成规则。这个utility可能有助于理解各种模式。它还可以帮助您准备出现您所描述问题的sscce。
附录:这是一个示例,显示了如何使用AlphaComposite.Src
模式。
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
/** @see http://stackoverflow.com/questions/7823631 */
public class X extends JPanel {
private static final int SIZE = 300;
private static final int INSET = 64;
private static final AlphaComposite OVER_HALF =
AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
private boolean src;
public X(boolean src) {
this.src = src;
this.setBackground(Color.lightGray);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(SIZE, SIZE);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Line2D line1 = new Line2D.Double(INSET, INSET,
getWidth() - INSET, getHeight() - INSET);
Line2D line2 = new Line2D.Double(getWidth() - INSET,
INSET, INSET, getHeight() - INSET);
g2.setStroke(new BasicStroke(64,
BasicStroke.CAP_ROUND,
BasicStroke.JOIN_BEVEL));
g2.setComposite(OVER_HALF);
g2.setColor(Color.red);
g2.draw(line1);
if (src) {
g2.setComposite(AlphaComposite.Src);
}
g2.setColor(Color.blue);
g2.draw(line2);
}
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(1, 0));
frame.add(new X(false));
frame.add(new X(true));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}