- [Main Page](index.md)
- [Classes](annotated.md)
- [Files](files.md)
- [Directories](dirs.md)
- [Related Pages](pages.md)
- [File List](files.md)
- [File Members](globals.md)
ColorBuf.h¶
Go to the documentation of this file.
00001 // Dan 7/22/2004 \DanLP115\Include\ColorBuf.h
00002
00003 #define __COLORBUF_H
00004
00005 #ifndef __FASTFTOL_H
00006 #include "FastFTOL.h"
00007 #endif
00008 #ifndef __VECTOR_H
00009 #include "Vector.h"
00010 #endif
00011 #ifndef __DATATYPE_H
00012 #include "DataType.h"
00013 #endif
00014 #ifndef __OS9ROS_H
00015 #include "Macros.h"
00016 #endif
00017
00018 #include <math.h>
00019 #define V_PI 3.1415926535898
00020
00021 #define BACKGROUNDMASK 0x00FFFFFF
00022 #define MAXCOLOR 255
00023 #define DEPTH24 24
00024 #define NUMMIPLEVEL 4
00025
00026 typedef union {
00027 struct {
00028 unsigned blue : 4;
00029 unsigned green : 4;
00030 unsigned red : 4;
00031 unsigned unused : 3;
00032 unsigned edge : 1;
00033 } bits;
00034 SWORD color;
00035 } Color;
00036
00037 class RGBAFloat;
00038 class RGBFloat;
00039 class ColorBuf {
00040 public:
00041 union {
00042 struct {
00043 #ifndef _MAC
00044 UBYTE red, green, blue, alpha;
00045 #else
00046 UBYTE alpha, blue, green, red;
00047 #endif
00048 } values;
00049 ULONG color;
00050 };
00051
00052 void operator += ( const ColorBuf & );
00053 void operator -= ( const ColorBuf & );
00054 void operator *= ( const float );
00055 ColorBuf operator + ( const ColorBuf &other );
00056 operator COLORREF() { return RGB(values.red, values.green, values.blue); }
00057 ColorBuf &operator = ( const ColorBuf &other) { color = other.color; return *this; }
00058
00059 RGBFloat GetFactoredRGBFloat() const;
00060 RGBFloat GetNormalizedRGBFloat() const;
00061
00062 ColorBuf() { color = 0; values.alpha = MAXCOLOR; }
00063 ColorBuf( LONG col ) { color = col; values.alpha = MAXCOLOR; }
00064 ColorBuf( UBYTE pred, UBYTE pgreen, UBYTE pblue ) { values.red = pred; values.green = pgreen; values.blue = pblue; values.alpha = MAXCOLOR; }
00065 ColorBuf( UBYTE pred, UBYTE pgreen, UBYTE pblue, UBYTE palpha ) { values.red = pred; values.green = pgreen; values.blue = pblue; values.alpha = palpha; }
00066 ColorBuf( COLORREF c ) { values.red=GetRValue(c); values.green=GetGValue(c); values.blue=GetBValue(c); }
00067 ColorBuf( const RGBAFloat &color );
00068
00069 UBYTE Red() const { return values.red; }
00070 UBYTE Green() const { return values.green; }
00071 UBYTE Blue() const { return values.blue; }
00072 UBYTE Alpha() const { return values.alpha; }
00073 ULONG Color() const { return color; }
00074 void Set( UBYTE pred, UBYTE pgreen, UBYTE pblue, UBYTE alpha ) { values.red = pred; values.green = pgreen; values.blue = pblue; values.alpha = alpha; }
00075 void SetRed( UBYTE red ) { values.red = red; }
00076 void SetGreen( UBYTE green ) { values.green = green; }
00077 void SetBlue( UBYTE blue ) { values.blue = blue; }
00078 void SetAlpha( UBYTE alpha ) { values.alpha = alpha; }
00079 void SetColor( ULONG pcolor ) { color = pcolor; values.alpha = MAXCOLOR; }
00080 void GammaCorrect(float power);
00081
00082 inline RGBFloat Get() const;
00083 float GetOpacity() const;
00084 inline void Set( const RGBFloat & );
00085 void SetOpacity( const float value );
00086 };
00087
00088 inline float ColorBuf::GetOpacity( void ) const
00089 {
00090 return (float)values.alpha/MAXCOLOR;
00091 }
00092
00093 inline void ColorBuf::SetOpacity( const float opacity )
00094 {
00095 values.alpha = fast_ftol_unsigned(opacity * MAXCOLOR + .5f);
00096 }
00097
00098 inline void ColorBuf::operator += ( const ColorBuf &other )
00099 {
00100 int tempred, tempgreen, tempblue, tempalpha;
00101 if ((tempred = values.red + other.values.red) > MAXCOLOR)
00102 values.red = MAXCOLOR;
00103 else
00104 values.red = tempred;
00105 if ((tempgreen = values.green + other.values.green) > MAXCOLOR)
00106 values.green = MAXCOLOR;
00107 else
00108 values.green = tempgreen;
00109 if ((tempblue = values.blue + other.values.blue) > MAXCOLOR)
00110 values.blue = MAXCOLOR;
00111 else
00112 values.blue = tempblue;
00113 if ((tempalpha = values.alpha + other.values.alpha) > MAXCOLOR)
00114 values.alpha = MAXCOLOR;
00115 else
00116 values.alpha = tempalpha;
00117 }
00118
00119 inline ColorBuf ColorBuf::operator + ( const ColorBuf &other )
00120 {
00121 ColorBuf temp(*this);
00122 temp.red += other.values.red;
00123 temp.green += other.values.green;
00124 temp.blue += other.values.blue;
00125 temp.alpha += other.values.alpha;
00126 return temp;
00127 }
00128
00129 inline void ColorBuf::operator -= ( const ColorBuf &other )
00130 {
00131 values.red -= other.values.red;
00132 values.green -= other.values.green;
00133 values.blue -= other.values.blue;
00134 values.alpha -= other.values.alpha;
00135 }
00136
00137 inline void ColorBuf::operator *= ( const float factor )
00138 {
00139 values.red = (UBYTE)(values.red * factor + .5);
00140 values.green = (UBYTE)(values.green * factor + .5);
00141 values.blue = (UBYTE)(values.blue * factor + .5);
00142 values.alpha = (UBYTE)(values.alpha * factor + .5);
00143 }
00144
00145 inline void GammaCorrectColBuf( UBYTE *color, float power)
00146 {
00147 if (power == 1)
00148 return;
00149 *color = fast_round(MIN(255.0f, MAXCOLOR * (float)pow((float)*color/MAXCOLOR, 1.f/power )));
00150 }
00151
00152 inline void ColorBuf::GammaCorrect(float power)
00153 {
00154 if (power == 1)
00155 return;
00156 ::GammaCorrectColBuf(&values.red, power);
00157 ::GammaCorrectColBuf(&values.green, power);
00158 ::GammaCorrectColBuf(&values.blue, power);
00159 }
00160
00161 #define MAKELUMINANCE( red, green, blue ) (0.3f*red + 0.59f*green + 0.11f*blue)
00162
00163
00164
This A:M SDK v12.0 documentation is maintained by Hash Inc. Please address any comments concerning this documentation to AMReports. If you have any information, knowledge, or documentation to share with the A:M developer community, please post them on the Hash SDK forum.
Generated on Thu Oct 27 11:46:43 2005 with doxygen 1.4.5 written by Dimitri van Heesch, © 1997-2001