首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMYK中的Java打印

CMYK中的Java打印
EN

Stack Overflow用户
提问于 2013-03-19 14:51:32
回答 3查看 1.3K关注 0票数 1

我想使用java打印机制绘制一些Graphics2D对象。所以我必须定义一个可打印的子类。

代码语言:javascript
复制
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颜色。有点像

代码语言:javascript
复制
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。我能以某种方式实现这种行为吗?

EN

回答 3

Stack Overflow用户

发布于 2013-03-19 15:16:34

没有简单的方法可以做到这一点,因为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 to CMYK and back algorithm)

编辑:

RGB描述计算机监视器的颜色。CMYK描述打印颜色。你不需要关心这个- CMYK是依赖打印机的,只要使用RGB就行了。

编辑2:如何确保打印颜色最接近所需的颜色:printer.htm?terms=color+calibration

票数 2
EN

Stack Overflow用户

发布于 2013-10-17 14:28:07

以下代码将创建一个带有CMYK颜色空间的EPS:

代码语言:javascript
复制
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();
        }
    }
}

确认:

代码语言:javascript
复制
$ grep cmyk cmyk.eps
1 0 0 0 setcmykcolor

并通过:

代码语言:javascript
复制
$ gs -o - -sQUIET -sDEVICE=inkcov cmyk.eps 
 0.01057  0.00000  0.00000  0.00000 CMYK OK
票数 1
EN

Stack Overflow用户

发布于 2013-03-19 14:57:18

我想你是在找java.awt.Color类

因此:g.setColor(新颜色(200,10,15));//便笺编号为r,g,b介于0到255之间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15502748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档