#include "Farbe.h" #include using namespace Framework; // Inhalt der Klasse Farbe aus Farbe.h // Konstruktor Farbe::Farbe() { fc = 0xFF000000; ref = 1; } Farbe::Farbe( unsigned char r, unsigned char g, unsigned char b ) { fc = 0xFF000000; setRGB( r, g, b ); // RGB setzen ref = 1; } Farbe::Farbe( unsigned char r, unsigned char g, unsigned char b, unsigned char a ) { fc = 0xFF000000; setRGBA( r, g, b, a ); // RGBA setzen ref = 1; } // nicht constant void Farbe::setR( unsigned char r ) // setzt r { fc = ( fc & 0xFF00FFFF ) | ( r << 16 ); } void Farbe::setG( unsigned char g ) // setzt g { fc = ( fc & 0xFFFF00FF ) | ( g << 8 ); } void Farbe::setB( unsigned char b ) // setzt b { fc = ( fc & 0xFFFFFF00 ) | ( b ); } void Farbe::setA( unsigned char a ) // setzt a { fc = ( fc & 0x00FFFFFF ) | ( a << 24 ); } void Farbe::setRGB( unsigned char r, unsigned char g, unsigned char b ) // setzt rgb { fc = ( fc & 0xFF000000 ) | ( r << 16 ) | ( g << 8 ) | b; } void Farbe::setRGBA( unsigned char r, unsigned char g, unsigned char b, unsigned char a ) // setzt rgba { fc = ( a << 24 ) | ( r << 16 ) | ( g << 8 ) | ( b ); } void Farbe::setFarbe( unsigned int fc ) // setzt Farbcode 0xRGBA { this->fc = fc; } // constant unsigned char Farbe::getR() const // gibt R zurück { return fc >> 16; } unsigned char Farbe::getG() const // gibt G zurück { return fc >> 8; } unsigned char Farbe::getB() const // gibt B zurück { return fc; } unsigned char Farbe::getA() const // gibt A zurück { return fc >> 24; } unsigned int Farbe::getFarbe() const // gibt Farbcode zurück { return fc; } bool Farbe::istGleich( unsigned char r, unsigned char g, unsigned char b, unsigned char a, int stärke ) const // vergleicht die Farben { return ( abs( ( (int)( ( fc >> 16 ) & 0xFF ) - (int)r ) ) <= stärke ) && ( abs( ( (int)( ( fc >> 8 ) & 0xFF ) - (int)g ) ) <= stärke ) && ( abs( ( (int)( fc & 0xFF ) - (int)b ) ) <= stärke ) && ( abs( ( (int)( ( fc >> 24 ) & 0xFF ) - (int)a ) ) <= stärke ); } // Reference Counting Farbe *Farbe::getThis() { ref++; return this; } Farbe *Farbe::release() { ref--; if( ref == 0 ) delete this; return 0; }