JPanel 上的图层

问题描述

我制作了一个 JPanel 并在其上绘制了 3 个矩形。我想混合它们重叠的颜色。我想像在现实生活中一样混合它们(我已经读过这实际上是不可能的,但我们可以实现类似 on this site 的东西;你可以看到油漆的数量/部分在那里很重要)。>

我怎样才能做到这一点?我已经尝试将 setComposite() 与我自己的合成一起使用,但我只能混合源像素和目标像素的颜色,而没有考虑目标像素包含多少部分的油漆。所以当我只有 2 种颜料要混合时很容易(每种颜料一份),但当有 3 种颜料时我就卡住了。

这是复合材料。我知道这是令人上瘾的颜色混合,但我想现在这无关紧要。

public void compose(Raster src,Raster dstIn,WritableRaster dstOut) {

        int r = chromakey.getRed(),g = chromakey.getGreen(),b = chromakey.getBlue();
        int[] pxSrc = new int[src.getNumBands()];
        int[] pxDst = new int[dstIn.getNumBands()];
        int chans = Math.min(src.getNumBands(),dstIn.getNumBands());

        for (int x = 0; x < dstIn.getWidth(); x++) {
            for (int y = 0; y < dstIn.getHeight(); y++) {
                pxSrc = src.getPixel(x,y,pxSrc);
                pxDst = dstIn.getPixel(x,pxDst);

                int alpha = pxSrc.length > 3? pxSrc[3] : 255;

                if (pxDst[0] == r && pxDst[1] == g && pxDst[2] == b) {
                    pxDst[0] = 0; pxDst[1] = 0; pxDst[2] = 0;
                }

                for (int i = 0; i < 3 && i < chans; i++) {

                    //pxSrc[i]
                    pxDst[i] = Math.min(255,(pxSrc[i] * alpha / 255) + (pxDst[i]));
                    dstOut.setPixel(x,pxDst);
                }
            }
        }
    }

根据网站,红色、绿色和蓝色(各一份)混合应该给我 RGB(85,85,85)。如何获得在 JPanel 上绘制了多少层? JPanel 上有类似图层的东西吗?如果没有,我该如何解决我的问题?

这是我绘制矩形的方法

@Override
    public void paint(Graphics g) {
        //super.paint(g);
        Shape shape = new Rectangle2D.Float(100,100,100);

        Graphics2D g2 = (Graphics2D) g;
        g2.setPaint(Color.RED);
        g2.fill(shape);

        shape = new Rectangle2D.Float(125,125,100);
        g2.setPaint(Color.BLUE);
        g2.fill(shape);

        shape = new Rectangle2D.Float(150,150,100);
        g2.setPaint(Color.GREEN);
        g2.fill(shape);
    }

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)