//===========================================================================// // File: color.hh // // Title: Declaration of Color classes. // // Project: Tool Architecture II // // Author: Jerry Edsall & Ken Olsen (based on work by J.M. Albertson) // // Purpose: Stores color information. // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 12/15/94 KEO Added RGBAColor class. // // 11/12/95 GDU Added MUNGA signatures and stream IO, moved to MUNGA // //---------------------------------------------------------------------------// // Copyright (c) 1994 Virtual World Entertainment, Inc. // // All rights reserved worldwide. // // This unpublished source code is PROPRIETARY and CONFIDENTIAL. // //===========================================================================// #if !defined(COLOR_HPP) #define COLOR_HPP #if !defined(MEMSTRM_HPP) #include #endif #if !defined(SCALAR_HPP) #include #endif //########################################################################## //############## RGBColor ############################################ //########################################################################## class RGBColor { friend class RGBAColor; public: Scalar Red, Green, Blue; #if defined(USE_SIGNATURE) friend int Is_Signature_Bad(const volatile RGBColor *p) { return False; } #endif RGBColor() { Red = Green = Blue = -1.0f; } RGBColor( Scalar r, Scalar g, Scalar b ) { Red = r; Green = g; Blue = b; } Logical operator==(const RGBColor &a_RGBColor) const { return !memcmp(this, &a_RGBColor, sizeof(RGBColor)); } Logical operator!=(const RGBColor &a_RGBColor) const { return memcmp(this, &a_RGBColor, sizeof(RGBColor)); } Logical TestInstance() const; RGBColor operator+(const RGBColor &a_RGBColor) const { return RGBColor ( min(this->Red + a_RGBColor.Red, 1.0), min(this->Green + a_RGBColor.Green, 1.0), min(this->Blue + a_RGBColor.Blue, 1.0)); } Scalar Infrared() const { return 0.3 * this->Red + 0.5 * this->Green + 0.2 * this->Blue; } // // Support functions // friend ostream& operator<<( ostream& stream, const RGBColor& C ); private: Scalar min(Scalar x, Scalar y) const { return x < y ? x : y; } }; //~~~~~~~~~~~~~~~~~~~~~~~~~~ RGBColor functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void Convert_From_Ascii( const char *str, RGBColor *color ); inline MemoryStream& MemoryStream_Read( MemoryStream* stream, RGBColor *output ) {return stream->ReadBytes(output, sizeof(*output));} inline MemoryStream& MemoryStream_Write( MemoryStream* stream, const RGBColor *input ) {return stream->WriteBytes(input, sizeof(*input));} //########################################################################## //############## RGBAColor ########################################### //########################################################################## class RGBAColor: public RGBColor { public: Scalar Alpha; RGBAColor(): RGBColor() { Alpha = -1.0f; } RGBAColor( Scalar r, Scalar g, Scalar b, Scalar a ): RGBColor(r, g, b) { Alpha = a; } Logical operator==(const RGBAColor &a_RGBAColor) const { return !memcmp(this, &a_RGBAColor, sizeof(RGBAColor)); } Logical operator!=(const RGBAColor &a_RGBAColor) const { return memcmp(this, &a_RGBAColor, sizeof(RGBAColor)); } // // Support functions // friend ostream& operator<<( ostream& stream, const RGBAColor& c ); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~ RGBAColor functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void Convert_From_Ascii( const char *str, RGBAColor *color ); inline MemoryStream& MemoryStream_Read( MemoryStream* stream, RGBAColor *output ) {return stream->ReadBytes(output, sizeof(*output));} inline MemoryStream& MemoryStream_Write( MemoryStream* stream, const RGBAColor *input ) {return stream->WriteBytes(input, sizeof(*input));} #endif //=============================================================================