Java Graphics2D如何在灰度中绘制颜色?

Java Graphics2D如何在灰度中绘制颜色?,java,swing,graphics2d,grayscale,Java,Swing,Graphics2d,Grayscale,我知道你可以将BuffereImage对象转换为灰度。但是,即使将Paint()设置为非灰色,您是否可以设置一种模式,使图形仅以灰度绘制“基本”直线、圆弧、矩形等 我想做的是:我们的绘图方法将访问一个模式标志。如果此模式标志为真,则所有内容都应以全色绘制。如果它是假的,那么所有的东西都应该用颜色表示的灰色阴影来绘制。灰色版本应表示已禁用 我们希望避免加载和使用图像,出于各种原因,我们更愿意只绘制东西。使用colorMode创建新的BuffereImage,将所有内容复制到他,并使用 例如: Bu

我知道你可以将BuffereImage对象转换为灰度。但是,即使将Paint()设置为非灰色,您是否可以设置一种模式,使图形仅以灰度绘制“基本”直线、圆弧、矩形等

我想做的是:我们的绘图方法将访问一个模式标志。如果此模式标志为真,则所有内容都应以全色绘制。如果它是假的,那么所有的东西都应该用颜色表示的灰色阴影来绘制。灰色版本应表示已禁用


我们希望避免加载和使用图像,出于各种原因,我们更愿意只绘制东西。

使用colorMode创建新的BuffereImage,将所有内容复制到他,并使用

例如:

BufferedImage grayImg = ImageIO.read(new File(path));
BufferedImage colorImage = new BufferedImage(grayImg .getWidth(), grayImg .getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = colorImage.createGraphics();
graphics.drawImage(grayImg ,0,0,null);
graphics.dispose();
grayImg.flush();
ImageIO.write(colorImage ,"jpg", newPath);
colorImage .flush();

一种可能是自定义灰度缩放。这是否可以实际使用取决于。。。swing欺骗和
Graphics2D.setComposite()
不起作用,但回摆缓冲区的
AlphaComposite
除外,因为缺少光栅方法,但如果您正在绘制缓冲图像,它就可以起作用。例如,我正在考虑包装对setPaint()的所有调用。我认为我们只使用两种绘画对象——颜色和渐变绘画。因此,如果模式为false,我可以将这些绘制对象中的颜色转换为灰色,然后调用真正的setPaint()。