001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.imaging.color; 018 019/** 020 * Represents a color in the CMYK color space. 021 * 022 * <p> 023 * Contains the constant values for black, white, red, green, blue, cyan, magenta, and yellow. 024 * </p> 025 * 026 * @see <a href="https://en.wikipedia.org/wiki/CMYK_color_model">https://en.wikipedia.org/wiki/CMYK_color_model</a> 027 * @since 1.0-alpha1 028 */ 029public final class ColorCmyk { 030 031 /** 032 * A constant for color cyan. Color components are: 033 * 034 * <pre> 035 * cyan: 100 036 * magenta: 0 037 * yellow: 0 038 * key: 0 039 * </pre> 040 */ 041 public static final ColorCmyk CYAN = new ColorCmyk(100, 0, 0, 0); 042 043 /** 044 * A constant for color magenta. Color components are: 045 * 046 * <pre> 047 * cyan: 0 048 * magenta: 100 049 * yellow: 0 050 * key: 0 051 * </pre> 052 */ 053 public static final ColorCmyk MAGENTA = new ColorCmyk(0, 100, 0, 0); 054 055 /** 056 * A constant for color yellow. Color components are: 057 * 058 * <pre> 059 * cyan: 0 060 * magenta: 0 061 * yellow: 100 062 * key: 0 063 * </pre> 064 */ 065 public static final ColorCmyk YELLOW = new ColorCmyk(0, 0, 100, 0); 066 067 /** 068 * A constant for color black. Color components are: 069 * 070 * <pre> 071 * cyan: 0 072 * magenta: 0 073 * yellow: 0 074 * key: 100 075 * </pre> 076 */ 077 public static final ColorCmyk BLACK = new ColorCmyk(0, 0, 0, 100); 078 079 /** 080 * A constant for color white. Color components are: 081 * 082 * <pre> 083 * cyan: 0 084 * magenta: 0 085 * yellow: 0 086 * key: 0 087 * </pre> 088 */ 089 public static final ColorCmyk WHITE = new ColorCmyk(0, 0, 0, 0); 090 091 /** 092 * A constant for color red. Color components are: 093 * 094 * <pre> 095 * cyan: 0 096 * magenta: 100 097 * yellow: 100 098 * key: 0 099 * </pre> 100 */ 101 public static final ColorCmyk RED = new ColorCmyk(0, 100, 100, 0); 102 103 /** 104 * A constant for color green. Color components are: 105 * 106 * <pre> 107 * cyan: 100 108 * magenta: 0 109 * yellow: 100 110 * key: 0 111 * </pre> 112 */ 113 public static final ColorCmyk GREEN = new ColorCmyk(100, 0, 100, 0); 114 115 /** 116 * A constant for color blue. Color components are: 117 * 118 * <pre> 119 * cyan: 100 120 * magenta: 100 121 * yellow: 0 122 * key: 0 123 * </pre> 124 */ 125 public static final ColorCmyk BLUE = new ColorCmyk(100, 100, 0, 0); 126 127 /** Cyan. */ 128 public final double c; 129 130 /** Magenta. */ 131 public final double m; 132 133 /** Yellow. */ 134 public final double y; 135 136 /** Key. */ 137 public final double k; 138 139 /** 140 * Constructs a new instance. 141 * 142 * @param c cyan. 143 * @param m magenta. 144 * @param y yellow. 145 * @param k key. 146 */ 147 public ColorCmyk(final double c, final double m, final double y, final double k) { 148 this.c = c; 149 this.m = m; 150 this.y = y; 151 this.k = k; 152 } 153 154 @Override 155 public boolean equals(final Object o) { 156 if (this == o) { 157 return true; 158 } 159 if (o == null || getClass() != o.getClass()) { 160 return false; 161 } 162 163 final ColorCmyk colorCmyk = (ColorCmyk) o; 164 if (Double.compare(colorCmyk.c, c) != 0) { 165 return false; 166 } 167 if (Double.compare(colorCmyk.k, k) != 0) { 168 return false; 169 } 170 if (Double.compare(colorCmyk.m, m) != 0) { 171 return false; 172 } 173 if (Double.compare(colorCmyk.y, y) != 0) { 174 return false; 175 } 176 177 return true; 178 } 179 180 @Override 181 public int hashCode() { 182 int result; 183 long temp; 184 temp = Double.doubleToLongBits(c); 185 result = (int) (temp ^ temp >>> 32); 186 temp = Double.doubleToLongBits(m); 187 result = 31 * result + (int) (temp ^ temp >>> 32); 188 temp = Double.doubleToLongBits(y); 189 result = 31 * result + (int) (temp ^ temp >>> 32); 190 temp = Double.doubleToLongBits(k); 191 return 31 * result + (int) (temp ^ temp >>> 32); 192 } 193 194 @Override 195 public String toString() { 196 return "{C: " + c + ", M: " + m + ", Y: " + y + ", K: " + k + "}"; 197 } 198}