你好。我有一个像上面这样的屏幕。通过使用滑块,我得到红色、绿色、蓝色。此外,我计算青色、洋红色、黄色,并从红色、绿色、蓝色计算 CMYK。我的问题是,有没有办法在 java 中显示 CMYK 颜色,如图片中的浅紫色。
private void stateChanged() {
red= sliderRed.getValue();
green= sliderGreen.getValue();
blue= sliderBlue.getValue();
txt_background.setBackground(new Color(red, green, blue));
}
在我看来它像 java 颜色类,有一个用于在 cmyk 中创建颜色对象的构造函数
和
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 颜色对象,可以在任何可以使用颜色对象的地方使用。
CMYK颜色构造函数的正确用法如下:
java.awt.Color cmyk = new Color(ColorSpace.getInstance(ColorSpace.TYPE_CMYK), new float [] {cyan,magenta,yellow}, key/alpha);
更新:正如 Jin 正确提到的那样,Java 中不支持
ColorSpace.getInstance()
方法。 (抛出非法参数异常。
我看到三种可能性:
使用jcgm项目中的CMYKColorSpace
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});
通过加载 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);