41 m_colorSpace = color.m_colorSpace;
42 m_opacity = color.m_opacity;
44 m_value[0] = color.m_value[0];
45 m_value[1] = color.m_value[1];
46 m_value[2] = color.m_value[2];
47 m_value[3] = color.m_value[3];
55 m_value[0] = color.red() / 255.0;
56 m_value[1] = color.green() / 255.0;
57 m_value[2] = color.blue() / 255.0;
60VColor::operator TQColor()
const
63 copy.convertToColorSpace( rgb );
66 color.setRgb(
int( 255 * copy[0] ),
int( 255 * copy[1] ),
int( 255 * copy[2] ) );
81VColor::convertToColorSpace(
const VColorSpace colorSpace )
88 if( m_colorSpace ==
rgb )
92 else if( m_colorSpace ==
cmyk )
94 m_value[0] = 1.0 - kMin( 1.0f, m_value[0] + m_value[3] );
95 m_value[1] = 1.0 - kMin( 1.0f, m_value[1] + m_value[3] );
96 m_value[2] = 1.0 - kMin( 1.0f, m_value[2] + m_value[3] );
98 else if( m_colorSpace ==
hsb )
101 if( m_value[1] == 0.0 )
104 m_value[0] = m_value[2];
105 m_value[1] = m_value[2];
106 m_value[2] = m_value[2];
110 float hue6 = 6.0 * m_value[0];
111 uint i =
static_cast<uint
>( hue6 );
114 float m = m_value[2] * ( 1.0 - m_value[1] );
115 float n = m_value[2] * ( 1.0 - m_value[1] * f );
116 float k = m_value[2] * ( 1.0 - m_value[1] * ( 1.0 - f ) );
160 else if( m_colorSpace ==
gray )
162 m_value[0] = m_value[0];
163 m_value[1] = m_value[0];
164 m_value[2] = m_value[0];
169 if( m_colorSpace ==
rgb )
171 m_value[0] = 1.0 - m_value[0];
172 m_value[1] = 1.0 - m_value[1];
173 m_value[2] = 1.0 - m_value[2];
176 else if( m_colorSpace ==
cmyk )
180 else if( m_colorSpace ==
hsb )
184 else if( m_colorSpace ==
gray )
188 m_value[3] = 1.0 - m_value[0];
194 if( m_colorSpace ==
rgb )
197 m_value[0] == m_value[1] &&
198 m_value[1] == m_value[2] )
201 m_value[3] = m_value[0];
211 if( m_value[0] > m_value[1] )
222 if( m_value[2] > max )
225 if( m_value[2] < min )
230 const float diff = max - min;
233 if( max == m_value[0] )
235 hue = ( m_value[1] - m_value[2] ) * VGlobal::one_6 / diff;
236 else if( max == m_value[1] )
238 hue = ( m_value[2] - m_value[0] ) * VGlobal::one_6 / diff + VGlobal::one_3;
241 hue = ( m_value[0] - m_value[1] ) * VGlobal::one_6 / diff + VGlobal::two_3;
248 m_value[1] = diff / max;
252 else if( m_colorSpace ==
cmyk )
256 else if( m_colorSpace ==
hsb )
260 else if( m_colorSpace ==
gray )
263 m_value[2] = m_value[0];
269 if( m_colorSpace ==
rgb )
276 else if( m_colorSpace ==
cmyk )
285 else if( m_colorSpace ==
hsb )
287 m_value[0] = m_value[2];
289 else if( m_colorSpace ==
gray )
299 TQDomElement me = element.ownerDocument().createElement(
"COLOR" );
300 element.appendChild( me );
302 if( m_colorSpace !=
rgb )
303 me.setAttribute(
"colorSpace", m_colorSpace );
304 if( m_opacity != 1.0 )
305 me.setAttribute(
"opacity", m_opacity );
307 if( m_colorSpace ==
gray )
308 me.setAttribute(
"v", m_value[0] );
311 me.setAttribute(
"v1", m_value[0] );
312 me.setAttribute(
"v2", m_value[1] );
313 me.setAttribute(
"v3", m_value[2] );
315 if( m_colorSpace ==
cmyk )
316 me.setAttribute(
"v4", m_value[3] );
323 switch( element.attribute(
"colorSpace" ).toUShort() )
326 m_colorSpace =
cmyk;
break;
328 m_colorSpace =
hsb;
break;
330 m_colorSpace =
gray;
break;
335 m_opacity = element.attribute(
"opacity",
"1.0" ).toFloat();
337 if( m_colorSpace ==
gray )
338 m_value[0] = element.attribute(
"v",
"0.0" ).toFloat();
341 m_value[0] = element.attribute(
"v1",
"0.0" ).toFloat();
342 m_value[1] = element.attribute(
"v2",
"0.0" ).toFloat();
343 m_value[2] = element.attribute(
"v3",
"0.0" ).toFloat();
345 if( m_colorSpace ==
cmyk )
346 m_value[3] = element.attribute(
"v4",
"0.0" ).toFloat();
349 if( m_value[0] < 0.0 || m_value[0] > 1.0 )
351 if( m_value[1] < 0.0 || m_value[1] > 1.0 )
353 if( m_value[2] < 0.0 || m_value[2] > 1.0 )
355 if( m_value[3] < 0.0 || m_value[3] > 1.0 )
This class keeps track of color properties.
VColor(VColorSpace colorSpace=rgb)
Constructs a new VColor with the specified colorspace.
VColorSpace colorSpace() const
Returns the color's colorspace.
void load(const TQDomElement &element)
Load this color's state from xml and initialize it accordingly.
void setColorSpace(const VColorSpace colorSpace, bool convert=true)
Sets the color's colorspace.
void save(TQDomElement &element) const
Save this color's state to xml.
@ gray
the Gray colorspace (gray from black to white)
@ cmyk
the CMYK colorspace (cyan, magenta, yellow and black components)
@ rgb
the RGB colorspace (red, green and blue components)
@ hsb
the HSB colorspace (hue, saturation and brightnes components)