Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-不透明颜色_Java_Colors_Drawing - Fatal编程技术网

Java-不透明颜色

Java-不透明颜色,java,colors,drawing,Java,Colors,Drawing,我在试着画一些界线。问题在于颜色。例如我画了几行红色,然后画了一行蓝色(或相反)。有时,这些线更多,对于最后一条线来说是不透明的 我尝试创建新颜色,并使用alpha composite 0.7设置颜色-对于那些更多的线条,还有一种颜色我保留了默认值-不透明(alpha 1.0)。起初我画了更多的线,比上一条还要多。但那一行“覆盖”了那一行。有解决这个问题的办法吗 我在玻璃窗上画那条线 编辑:这段代码很健壮,所以很难发布,这也是论文的一部分。 例如,原理是2色 颜色基本色; 颜色相似 然后,我将

我在试着画一些界线。问题在于颜色。例如我画了几行红色,然后画了一行蓝色(或相反)。有时,这些线更多,对于最后一条线来说是不透明的

我尝试创建新颜色,并使用alpha composite 0.7设置颜色-对于那些更多的线条,还有一种颜色我保留了默认值-不透明(alpha 1.0)。起初我画了更多的线,比上一条还要多。但那一行“覆盖”了那一行。有解决这个问题的办法吗

我在玻璃窗上画那条线


编辑:这段代码很健壮,所以很难发布,这也是论文的一部分。 例如,原理是2色 颜色基本色; 颜色相似

然后,我将paint方法和2个hashmaps作为属性—存储了一些点。 我在这张地图上迭代,记得有一点和他相似,其他的都和他有关 图形2D。绘制线(x1、y1、x2、y2)并更改颜色,并用另一种颜色绘制最后一条线。我也在修改笔划,使其更具意义

我希望这足够了


edit2: 我有一些点类似于一些健壮的绘制方法,这里是图形修改 迭代器迭代点列表的列表

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));
}
点相似=null;
迭代器第二迭代器;
图形.设置颜色(类似颜色);
while(iterator.hasNext()){
Point=iterator.next();
如果(点等于(相似点)){
相似=相似点;
}否则{
secondIterator=secondMap.get(point.iterator();
while(secondIterator.hasNext()){
Point secondPoint=secondIterator.next();
图形2D.绘制线(point.getX(),point.getY(),
secondPoint.getX(),secondPoint.getY());
}
}
}
if(类似!=null){
secondIterator=secondMap.get(类似);
图形2d.设置颜色(hooverColor);
图形2D.设定行程(新基本行程(2.5f));
while(secondIterator.hasNext()){
Point secondPoint=secondIterator.next();
graphics2D.drawLine(类似.getX(),类似.getY(),
secondPoint.getX(),secondPoint.getY());
}
图形2d.设置颜色(类似颜色);
图形2D.设定行程(新基本行程(1.0f));
}
我在记事本上写的,所以对一些错误(我认为括号等)感到抱歉,但这是修改的机制,这是迭代和其他方法的其他方法,但这并不重要。中风的问题并不存在,因为一开始我没有中风


谢谢您的建议。

结果取决于使用在图形上下文中指定的合成规则。这可能有助于理解各种模式。它还可以帮助您准备一份展示您所描述问题的报告

附录:下面是一个例子,展示了如何使用mode实现这一点


您可以发布一个please吗?作为对您的编辑的回应,请注意SSCCE只演示了这个问题。它可以是原始代码的简化版本,也可以是专门为演示而构建的代码。通过制作SSCCE,您还将发现笔划是否是问题的一部分。我尝试将composite设置为使用src over composite,并将公共线的颜色设置为0.5 alpha,而另一行的颜色设置为1.0 alpha,但我有了一些想法。可能使用公共线路作为目的地,最后一条线路作为src over。。。。我要试试。我会很感激你为我准备了一些sscce。方法是paintLines(Graphics2D-graphics),它在覆盖的methon-paint(graphics g)中与其他一些方法一起调用。我对代码做了一些修改,因为在paintLines方法中进行了优化(使用这么多对象计算和操作贴图需要很长时间…),首先绘制几条线,然后使用一些规则更改合成,最后在它们上面绘制最后一条线。我试着让graphics.createGraphics()将图形复制到2个图形(srcGraphics,dstGraphics)中,然后我对其进行了修改,但它不能完全工作。请用简单的sscce来理解问题。你应该编辑你的问题,将你描述的问题包括在内。请阅读关于如何缩小示例重点的链接。我为可能误导您的错误道歉。我为我的愚蠢道歉,但这在我的情况下不起作用。我试过让它和你的sscce相似(这很有用,但不幸的是对我来说不是)。有几条线“透支”很好,但另一些线画得不好。下面是两个截图示例。
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);
    }
}