我想使用Java打印机制绘制一些Graphics2D对象。所以我必须定义Printable的子类。
public class PrintCMYK() implements Printable {
public int print(Graphics g, PageFormat pf, int page)
throws PrinterException {
g.setColor(Color.RED);
g.fillOval(44, 44, 100, 100);
}
}
因此,此代码仅打印一个红色的rgb圆圈。 Java可能会以某种CMYK格式转换rgb颜色,以便能够使用CMYK打印它。但是我要在这里完全控制。所以我可以以某种方式明确设置想要的CMYK颜色。就像是
public class PrintCMYK() implements Printable {
public int print(Graphics g, PageFormat pf, int page)
throws PrinterException {
float[] ff = {0, 1, 0, 0}; // pure magenta
Color cmykColor = new Color(ColorSpace.getInstance(TYP_CMYK), ff, 1);
g.setPaint(cmykColor);
g.fillOval(44, 44, 100, 100);
}
}
不幸的是,此代码无法正常工作。
UPD:在Postscript中,由Java代码使用指令setrgbcolor生成,但我需要setcmykcolor。我能以某种方式实现这种行为吗?
最佳答案
没有简单的方法可以执行此操作-因为在RGB和CMYK之间没有精确的转换算法。如果您被迫使用CMYK颜色空间,则有两种解决方法:
RGB和CMYK之间的近似转换,反之亦然(http://www.javascripter.net/faq/rgb2cmyk.htm,http://www.rapidtables.com/convert/color/cmyk-to-rgb.htm)
使用配置文件(RGB to CMYK and back algorithm)
编辑:
RGB描述计算机显示器的颜色。 CMYK描述了打印颜色。您无需担心-CMYK取决于打印机,只需使用RGB,打印就可以了。
编辑2:
如何确保打印颜色最接近所需颜色:
http://desktoppub.about.com/cs/colorcalibration/a/cal_printer.htm?terms=color+calibration