1

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 はおそらく、何らかの方法で RGB カラーを CMYK に変換し、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が必要です。どうにかしてこの動作を達成できますか?

4

3 に答える 3

2

RGB と CMYK 間の正確な変換アルゴリズムがないため、簡単な方法はありません。CMYK カラー スペースを使用する必要がある場合は、次の 2 つの方法があります。

  1. RGB と CMYK の間、およびその逆の近似変換 ( http://www.javascripter.net/faq/rgb2cmyk.htmhttp://www.rapidtables.com/convert/color/cmyk-to-rgb.htm )

  2. プロファイルを使用する ( RGB から CMYK へ、およびバック アルゴリズム)

編集:

RGB は、コンピューター モニターの色を表します。CMYK は印刷色を表します。それを気にする必要はありません - CMYK はプリンターに依存します。RGB を使用するだけで印刷はうまくいきます。

編集 2: 印刷色が目的の色に最も近いことを確認する方法: http://desktoppub.about.com/cs/colorcalibration/a/cal_printer.htm?terms=color+calibration

于 2013-03-19T15:16:34.573 に答える
1

次のコードは、CMYK カラー スペースで EPS を作成します。

import java.io.*;
import java.awt.*;
import java.awt.geom.*;
import org.apache.fop.util.CMYKColorSpace;
import org.apache.xmlgraphics.java2d.GraphicContext;
import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;

public class RenderEPS {
    public static void renderEPS(Path2D path, Color color, String filename) throws Exception {
        EPSDocumentGraphics2D graphics = new EPSDocumentGraphics2D(false);
        FileOutputStream fileOutputStream = new FileOutputStream(filename);
        graphics.setupDocument(fileOutputStream, 200, 200);
        graphics.setGraphicContext(new GraphicContext());
        graphics.setPaint(color);
        graphics.scale(50, 50);
        graphics.fill(path);
        graphics.finish();
    }

    public static void main(String[] args) {
        Path2D path = new Path2D.Double();
        path.moveTo(2, 1);
        path.lineTo(3, 2);
        path.lineTo(2, 3);
        path.lineTo(1, 2);
        path.lineTo(2, 1);

        float[] colorComponents = {1, 0, 0, 0}; // CMYK cyan
        Color color = new Color(CMYKColorSpace.getInstance(), colorComponents, 1f);

        try {
            renderEPS(path, color, "cmyk.eps");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

確認済み:

$ grep cmyk cmyk.eps
1 0 0 0 setcmykcolor

そしてによって:

$ gs -o - -sQUIET -sDEVICE=inkcov cmyk.eps 
 0.01057  0.00000  0.00000  0.00000 CMYK OK
于 2013-10-17T14:28:07.947 に答える
0

java.awt.Color クラスを探していると思います

そう: g.setColor(新しい色(200,10,15)); //音符番号は 0 から 255 までの r,g,b です

于 2013-03-19T14:57:18.640 に答える