问题描述
我制作了一个 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);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)