我想使用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.htmhttp://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

10-07 13:35
查看更多