001/* 002 * BioJava development code 003 * 004 * This code may be freely distributed and modified under the 005 * terms of the GNU Lesser General Public Licence. This should 006 * be distributed with the code. If you do not have a copy, 007 * see: 008 * 009 * http://www.gnu.org/copyleft/lesser.html 010 * 011 * Copyright for this code is held jointly by the individual 012 * authors. These should be listed in @author doc comments. 013 * 014 * For more information on the BioJava project and its aims, 015 * or to join the biojava-l mailing list, visit the home page 016 * at: 017 * 018 * http://www.biojava.org/ 019 * 020 * Created on Aug 3, 2007 021 */ 022package org.biojava.nbio.structure.gui.util.color; 023 024import java.awt.*; 025import java.awt.color.ColorSpace; 026 027/** 028 * @author Spencer Bliven 029 * 030 */ 031public class HSVColorSpace extends ColorSpace { 032 033 private static final long serialVersionUID = 8324413992279510075L; 034 035 public static void main(String[] args) { 036 HSVColorSpace csHSV = new HSVColorSpace(); 037 ColorSpace csRGB = ColorSpace.getInstance(CS_sRGB); 038 Color c; 039 float[] rgbComp; 040 float[] hsvComp; 041 042 c = Color.RED; 043 rgbComp = c.getColorComponents(csRGB,null); 044 hsvComp = c.getColorComponents(csHSV, null); 045 assert(rgbComp.length == 3); 046 assert(hsvComp.length == 3); 047 System.out.format("RED\tRGB[%f %f %f] HSV[%f %f %f]\n", 048 rgbComp[0], rgbComp[1], rgbComp[2], 049 hsvComp[0], hsvComp[1], hsvComp[2] ); 050 051 052 c = Color.WHITE; 053 rgbComp = c.getColorComponents(csRGB,null); 054 hsvComp = c.getColorComponents(csHSV, null); 055 System.out.format("WHITE\tRGB[%f %f %f] HSV[%f %f %f]\n", 056 rgbComp[0], rgbComp[1], rgbComp[2], 057 hsvComp[0], hsvComp[1], hsvComp[2] ); 058 059 c = Color.BLACK; 060 rgbComp = c.getColorComponents(csRGB,null); 061 hsvComp = c.getColorComponents(csHSV, null); 062 System.out.format("BLACK\tRGB[%f %f %f] HSV[%f %f %f]\n", 063 rgbComp[0], rgbComp[1], rgbComp[2], 064 hsvComp[0], hsvComp[1], hsvComp[2] ); 065 066 c = Color.GRAY; 067 rgbComp = c.getColorComponents(csRGB,null); 068 hsvComp = c.getColorComponents(csHSV, null); 069 System.out.format("GRAY\tRGB[%f %f %f] HSV[%f %f %f]\n", 070 rgbComp[0], rgbComp[1], rgbComp[2], 071 hsvComp[0], hsvComp[1], hsvComp[2] ); 072 073 c = Color.CYAN; 074 rgbComp = c.getColorComponents(csRGB,null); 075 hsvComp = c.getColorComponents(csHSV, null); 076 System.out.format("CYAN\tRGB[%f %f %f] HSV[%f %f %f]\n", 077 rgbComp[0], rgbComp[1], rgbComp[2], 078 hsvComp[0], hsvComp[1], hsvComp[2] ); 079 080 081 } 082 083 /** 084 */ 085 public HSVColorSpace() { 086 super(ColorSpace.TYPE_HSV, 3); 087 } 088 089 /** 090 * @param ciexyzvalue The color components in CIEXYZ colorspace 091 * @return the equivalent HSV components 092 * @see java.awt.color.ColorSpace#fromCIEXYZ(float[]) 093 */ 094 @Override 095 public float[] fromCIEXYZ(float[] ciexyzvalue) { 096 ColorSpace CIEXYZcs = ColorSpace.getInstance(CS_CIEXYZ); 097 float[] rgb = CIEXYZcs.toRGB(ciexyzvalue); 098 return this.fromRGB(rgb); 099 } 100 101 /** 102 * @param rgbvalue 103 * @return 104 * @see java.awt.color.ColorSpace#fromRGB(float[]) 105 */ 106 @Override 107 public float[] fromRGB(float[] rgbvalue) { 108 assert(rgbvalue.length==3); 109 Color rgbColor = new Color(rgbvalue[0], rgbvalue[1], rgbvalue[2]); 110 return Color.RGBtoHSB(rgbColor.getRed(),rgbColor.getGreen(),rgbColor.getBlue(), null); 111 } 112 113 /** 114 * @param hsv 115 * @return 116 * @see java.awt.color.ColorSpace#toCIEXYZ(float[]) 117 */ 118 @Override 119 public float[] toCIEXYZ(float[] hsv) { 120 float[] rgb = this.toRGB(hsv); 121 ColorSpace CIEXYZcs = ColorSpace.getInstance(CS_CIEXYZ); 122 return CIEXYZcs.fromRGB(rgb); 123 } 124 125 /** 126 * @param hsv 3-component array specifying hue, saturation, value 127 * @return equivalent red,green,blue components 128 * @see java.awt.color.ColorSpace#toRGB(float[]) 129 */ 130 @Override 131 public float[] toRGB(float[] hsv) { 132 int rgb = Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]); 133 Color rgbColor = new Color(rgb); 134 return rgbColor.getColorComponents(null); 135 } 136 137 private static HSVColorSpace hsvSpace; 138 /** 139 * The HSV color space 140 */ 141 public static final int CS_HSV = 1007; 142 public static ColorSpace getInstance(int colorspace) { 143 ColorSpace theColorSpace; 144 switch( colorspace ) { 145 case CS_HSV: 146 synchronized(HSVColorSpace.class) { 147 if(hsvSpace == null) { 148 hsvSpace = new HSVColorSpace(); 149 } 150 theColorSpace = hsvSpace; 151 } 152 break; 153 default: 154 theColorSpace = ColorSpace.getInstance(colorspace); 155 } 156 157 return theColorSpace; 158 } 159 160 public static ColorSpace getHSVColorSpace() { 161 return HSVColorSpace.getInstance(CS_HSV); 162 } 163 164}