#ifndef COLOR_R08G08B08I_h
#define COLOR_R08G08B08I_h

/*!
 	@file
 	@brief	１ピクセルをあらわすクラス郡
\n			RGB888 フォーマット Ver.
 */
#include"../../Setup/CompileMode.h"
#include"../../Auxiliary/Macro.h"

namespace Maid
{
	/*!
	 	@class	COLOR_R08G08B08I COLOR_R08G08B08I.h
	 	@brief	アルファ無２４ビットピクセル
	 */
	class COLOR_R08G08B08I
	{
	public:
		COLOR_R08G08B08I(){}	//!<	コンストラクタ
		COLOR_R08G08B08I( unt08 r, unt08 g, unt08 b ) { SetRGB(r,g,b); }	//!<	コンストラクタ
		COLOR_R08G08B08I( unt08 a, unt08 r, unt08 g, unt08 b ) { SetRGB(r,g,b); }	//!<	コンストラクタ
		template <class COLOR>
		COLOR_R08G08B08I( const COLOR& Col ){  SetRGB( Col.GetR(), Col.GetG(), Col.GetB() );  }	//!<	コンストラクタ


		unt08 GetA()const	{ return 0xFF;		}	//!<	α成分の取得
		unt08 GetR()const	{ return m_Red;		}	//!<	赤成分の取得
		unt08 GetG()const	{ return m_Green;	}	//!<	緑成分の取得
		unt08 GetB()const	{ return m_Blue;	}	//!<	青成分の取得
		unt32 Get() const	{ return (m_Red<<16)|(m_Green<<8)|(m_Blue<<0); }	//!<	32BitColotとして取得

		operator unt32()const{ return Get(); }	//!<	一括変換

		void SetA( unt08 a )	{ }					//!<	赤成分の設定
		void SetR( unt08 r )	{ m_Red   = r;	}	//!<	赤成分の設定
		void SetG( unt08 g )	{ m_Green = g;	}	//!<	緑成分の設定
		void SetB( unt08 b )	{ m_Blue  = b;	}	//!<	青成分の設定

		void SetRGB( unt08 r, unt08 g, unt08 b )	//!<	いっきに設定
		{
			SetR( r );
			SetG( g );
			SetB( b );
		}

		//!	違うピクセルフォーマットとのコピー
		template <class PIXEL>
		COLOR_R08G08B08I& operator = (const PIXEL &src)
		{
			SetRGB(src.GetR(),src.GetG(),src.GetB());
			return *this;
		}
		//!	同じピクセルフォーマットとのコピー
		COLOR_R08G08B08I& operator = (const COLOR_R08G08B08I& src)
		{
			m_Blue = src.m_Blue;
			m_Green = src.m_Green;
			m_Red = src.m_Red;
			return *this;
		}
	private:
		unt08 m_Blue;
		unt08 m_Green;
		unt08 m_Red;
	};

}

#endif
