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 CMY color space. 021 * 022 * <p>Contains the constant values for black, white, red, 023 * green, blue, cyan, magenta, and yellow.</p> 024 * 025 * @see <a href="https://en.wikipedia.org/wiki/CMY_color_model">https://en.wikipedia.org/wiki/CMY_color_model</a> 026 * @since 1.0-alpha1 027 */ 028public final class ColorCmy { 029 030 /** 031 * A constant for color cyan. Color components are: 032 * <pre> 033 * cyan: 100 034 * magenta: 0 035 * yellow: 0 036 * </pre> 037 */ 038 public static final ColorCmy CYAN = new ColorCmy(100, 0, 0); 039 040 /** 041 * A constant for color magenta. Color components are: 042 * <pre> 043 * cyan: 0 044 * magenta: 100 045 * yellow: 0 046 * </pre> 047 */ 048 public static final ColorCmy MAGENTA = new ColorCmy(0, 100, 0); 049 050 /** 051 * A constant for color yellow. Color components are: 052 * <pre> 053 * cyan: 0 054 * magenta: 0 055 * yellow: 100 056 * </pre> 057 */ 058 public static final ColorCmy YELLOW = new ColorCmy(0, 0, 100); 059 060 /** 061 * A constant for color black. Color components are: 062 * <pre> 063 * cyan: 100 064 * magenta: 100 065 * yellow: 100 066 * </pre> 067 */ 068 public static final ColorCmy BLACK = new ColorCmy(100, 100, 100); 069 070 /** 071 * A constant for color white. Color components are: 072 * <pre> 073 * cyan: 0 074 * magenta: 0 075 * yellow: 0 076 * </pre> 077 */ 078 public static final ColorCmy WHITE = new ColorCmy(0, 0, 0); 079 080 /** 081 * A constant for color red. Color components are: 082 * <pre> 083 * cyan: 0 084 * magenta: 100 085 * yellow: 100 086 * </pre> 087 */ 088 public static final ColorCmy RED = new ColorCmy(0, 100, 100); 089 090 /** 091 * A constant for color green. Color components are: 092 * <pre> 093 * cyan: 100 094 * magenta: 0 095 * yellow: 100 096 * </pre> 097 */ 098 public static final ColorCmy GREEN = new ColorCmy(100, 0, 100); 099 100 /** 101 * A constant for color blue. Color components are: 102 * <pre> 103 * cyan: 100 104 * magenta: 100 105 * yellow: 0 106 * </pre> 107 */ 108 public static final ColorCmy BLUE = new ColorCmy(100, 100, 0); 109 110 public final double C; 111 public final double M; 112 public final double Y; 113 114 public ColorCmy(final double C, final double M, final double Y) { 115 this.C = C; 116 this.M = M; 117 this.Y = Y; 118 } 119 120 @Override 121 public String toString() { 122 return "{C: " + C + ", M: " + M + ", Y: " + Y + "}"; 123 } 124 125 @Override 126 public boolean equals(final Object o) { 127 if (this == o) { 128 return true; 129 } 130 if (o == null || getClass() != o.getClass()) { 131 return false; 132 } 133 134 final ColorCmy colorCmy = (ColorCmy) o; 135 if (Double.compare(colorCmy.C, C) != 0) { 136 return false; 137 } 138 if (Double.compare(colorCmy.M, M) != 0) { 139 return false; 140 } 141 if (Double.compare(colorCmy.Y, Y) != 0) { 142 return false; 143 } 144 145 return true; 146 } 147 148 @Override 149 public int hashCode() { 150 int result; 151 long temp; 152 temp = Double.doubleToLongBits(C); 153 result = (int) (temp ^ (temp >>> 32)); 154 temp = Double.doubleToLongBits(M); 155 result = 31 * result + (int) (temp ^ (temp >>> 32)); 156 temp = Double.doubleToLongBits(Y); 157 result = 31 * result + (int) (temp ^ (temp >>> 32)); 158 return result; 159 } 160}