从 RGB 绘制 CMYK 颜色

问题描述 投票:0回答:2

你好。我有一个像上面这样的屏幕。通过使用滑块,我得到红色、绿色、蓝色。此外,我计算青色、洋红色、黄色,并从红色、绿色、蓝色计算 CMYK。我的问题是,有没有办法在 java 中显示 CMYK 颜色,如图片中的浅紫色。

private void stateChanged() {
      red= sliderRed.getValue();
      green= sliderGreen.getValue();
      blue= sliderBlue.getValue();
      txt_background.setBackground(new Color(red, green, blue));
}
java graphics rgb cmyk
2个回答
3
投票

在我看来它像 java 颜色类,有一个用于在 cmyk 中创建颜色对象的构造函数

https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(java.awt.color.ColorSpace,%20float[],%20float)

https://docs.oracle.com/javase/7/docs/api/java/awt/color/ColorSpace.html

所以你最终会得到像

这样的东西

Color cmykColorValue = new Color(TYPE_CMYK, [cValue, mValue, yValue, kValue], alpha)

其中alpha是0到1的形式,cValue、mValue、yValue、kValue是对应的cmyk值。

这应该创建一个新的 CMYK 颜色对象,可以在任何可以使用颜色对象的地方使用。


0
投票

CMYK颜色构造函数的正确用法如下:

java.awt.Color cmyk = new Color(ColorSpace.getInstance(ColorSpace.TYPE_CMYK), new float [] {cyan,magenta,yellow}, key/alpha);

更新:正如 Jin 正确提到的那样,Java 中不支持

ColorSpace.getInstance()
方法。 (抛出非法参数异常。 我看到三种可能性:

  1. 使用jcgm项目中的CMYKColorSpace

  2. Apache XML Graphics Commons 也有一个实现:org.apache.xmlgraphics.java2d.color.DeviceCMYKColorSpace

    ColorSpace cs = new DeviceCMYKColorSpace();
    float[] cmyk = cs.fromRGB(new float[] {0.1f, 0.5f, 0.9f});
    
  3. 通过加载 CMYK ICC 配置文件使用 CMYK 色彩空间,然后可以使用该配置文件创建 ColorSpace 对象。

    ICC_Profile cmykProfile = ICC_Profile.getInstance("path/to/cmyk/profile.icc");
    ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile);
    Color cmykColor = new Color(cmykColorSpace, new float[]{0.5f, 0.25f, 0.75f, 0.1f}, 1.0f);
    
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.