Java – 不透明的颜色
我想画一些线。 问题是关于颜色。 例如。 我有几行红色,比绘制一行蓝色(或反转)。 有时候,那些更多的是最后一个不透明的。
我试图使新的颜色和设置颜色与阿尔法复合0.7 – 对于更多的线条,和一个颜色我离开默认 – 不透明(阿尔法1.0)。 起初,我画了更多的线,而不是最后一个。 但是,这条线“覆盖”一个。 有没有解决这个问题的方法?
我在glasspane上绘制线条。
编辑 :该代码是健壮的,所以它是很难发布,这是论文的一部分。 原理是2色,例如Color basicColor; 颜色相似的颜色;
比我有绘画方法和2 hashmaps作为属性 – 一些点存储。 我遍历这个地图,记住一点,类似于他,所有其他连接与graphics2D.drawLine(x1,y1,x2,y2)和改变颜色和最后一行涂上另一种颜色。 我也在修改中风,使其更显着。
我希望这足够了…
edit2:我有一些点类似点比一些强大的绘画方法,这里是graphics修改迭代器遍历点列表的列表。
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)); }
我写在记事本中,所以对于一些错误(我认为括号等)感到抱歉,但这是修改的机制,围绕这是其他迭代和其他方法,但它并不重要。 中风问题不存在,因为一开始我没有中风。
感谢您的任何想法。
结果取决于使用setComposite()
在graphics上下文中指定哪个合成规则。 这个工具可能对理解各种模式有用。 它也可能帮助你准备一个展示你所描述的问题的方法。
附录:下面是一个例子,展示了如何使用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); } }