⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floatcolor.h

📁 这是我做的一个VC++小程序
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////////
//	
// FloatColor.h: interface for the CFloatColor class.
//
////////////////////////////////////////////////////////////////////////////////
// 版权所有(2002)
// Copyright(2002)
// 编写者: 向世明
// Author: Xiang Shiming

#ifndef _CFLOATCOLOR_H
#define _CFLOATCOLOR_H
#include "Grphcs.h"

class CFloatColor  
{
public:
	CFloatColor();
	CFloatColor(float red , float green, float blue, float alpha  = 1.0f);
	CFloatColor(const FLOATCOLORRGB& rgb);
	CFloatColor(const FLOATCOLORRGBA& rgba);
	virtual ~CFloatColor();

public:

	//设置颜色
	void Set(float red,float green,float blue,float alpha = 1.0f);

	//获取颜色
	FLOATCOLORRGB  GetRGB() const;
	FLOATCOLORRGBA GetRGBA() const;

	//重载 "=" 运算符
	inline CFloatColor operator = (const FLOATCOLORRGB& rgb);
	inline CFloatColor operator = (const CFloatColor& color);
	inline CFloatColor operator = (const FLOATCOLORRGBA& rgba);

	//重载 "+" 运算符
	inline CFloatColor operator + (const FLOATCOLORRGB& rgb);
	inline CFloatColor operator + (const CFloatColor& color);
	inline CFloatColor operator + (const FLOATCOLORRGBA& rgba);

	//重载 "+=" 运算符
	inline CFloatColor operator += (const FLOATCOLORRGB& rgb);
	inline CFloatColor operator += (const CFloatColor& color);
	inline CFloatColor operator += (const FLOATCOLORRGBA& rgba);

	//重载 "*" 运算符
	inline CFloatColor operator * (const FLOATCOLORRGB& rgb);
	inline CFloatColor operator * (const CFloatColor& color);
	inline CFloatColor operator * (const FLOATCOLORRGBA& rgba);
	inline CFloatColor operator * (float fc);

	//重载 "*=" 运算符
	inline CFloatColor operator *= (const FLOATCOLORRGB& rgb);
	inline CFloatColor operator *= (const CFloatColor& color);
	inline CFloatColor operator *= (const FLOATCOLORRGBA& rgba);
	inline CFloatColor operator *= (float fc);

	//颜色归一化处理
	inline CFloatColor Clamp();

public:

	//浮点颜色
	float  red, green, blue, alpha;

};
#endif 


//////////////////////////////////////////////////////////////////////////////////////////////
//
//					  运算符重载  
//
//////////////////////////////////////////////////////////////////////////////////////////////

//重载 "=" 运算符
inline CFloatColor CFloatColor::operator = (const CFloatColor& color)
{
	red = color.red;
	green = color.green;
	blue = color.blue;
	alpha = color.alpha;
	return *this;
}

//重载 "=" 运算符
inline CFloatColor CFloatColor::operator = (const FLOATCOLORRGB& rgb)
{
	red = rgb.red;
	green = rgb.green;
	blue = rgb.blue;
	alpha = 1.0f;
	return *this;
}

//重载 "=" 运算符,
inline CFloatColor CFloatColor::operator = (const FLOATCOLORRGBA& rgba)
{
	red = rgba.red;
	green = rgba.green;
	blue = rgba.blue;
	alpha = rgba.alpha;
	return *this;
}


//重载 "+" 运算符
inline CFloatColor CFloatColor::operator + (const CFloatColor& color)
{
	CFloatColor clr;
	clr.red =   red   + color.red;
	clr.green = green + color.green;
	clr.blue =  blue  + color.blue;

	//对于 alpha 分量,在这里,我们也简单地执行代数加法
	clr.alpha = alpha + color.alpha;
	return clr;
}

//重载 "+" 运算符
inline CFloatColor CFloatColor::operator + (const FLOATCOLORRGB& rgb)
{
	CFloatColor clr;
	clr.red =   red   + rgb.red;
	clr.green = green + rgb.green;
	clr.blue =  blue  + rgb.blue;

	//对于 alpha 分量,在这里,我们也简单地用1.0代替
	clr.alpha = 1.0f;
	return clr;
}

//重载 "+" 运算符,
inline CFloatColor CFloatColor::operator + (const FLOATCOLORRGBA& rgba)
{
	CFloatColor clr;
	clr.red =   red   + rgba.red;
	clr.green = green + rgba.green;
	clr.blue =  blue  + rgba.blue;
	clr.alpha = alpha + rgba.alpha;
	return clr;
}

//重载 "+=" 运算符
inline CFloatColor CFloatColor::operator += (const CFloatColor& color)
{
	red   += color.red;
	green += color.green;
	blue  += color.blue;
	alpha += color.alpha;
	return *this;
}

//重载 "+=" 运算符
inline CFloatColor CFloatColor::operator += (const FLOATCOLORRGB& rgb)
{
	red   += rgb.red;
	green += rgb.green;
	blue  += rgb.blue;
	alpha = 1.0f;
	return *this;
}

//重载 "+=" 运算符,
inline CFloatColor CFloatColor::operator += (const FLOATCOLORRGBA& rgba)
{
	red   += rgba.red;
	green += rgba.green;
	blue  += rgba.blue;
	alpha += rgba.alpha;
	return *this;
}

//重载 "*" 运算符
inline CFloatColor CFloatColor::operator * (const CFloatColor& color)
{
	CFloatColor clr;
	clr.red =   red   * color.red;
	clr.green = green * color.green;
	clr.blue =  blue  * color.blue;
	clr.alpha = alpha * color.alpha;
	return clr;
}

//重载 "*" 运算符
inline CFloatColor CFloatColor::operator * (const FLOATCOLORRGB& rgb)
{
	CFloatColor clr;
	clr.red =   red   * rgb.red;
	clr.green = green * rgb.green;
	clr.blue =  blue  * rgb.blue;

	//alpha 分量将保持不变
	clr.alpha = alpha; 
	return clr;
}

//重载 "*" 运算符,
inline CFloatColor CFloatColor::operator * (const FLOATCOLORRGBA& rgba)
{
	CFloatColor clr;
	clr.red =   red   * rgba.red;
	clr.green = green * rgba.green;
	clr.blue =  blue  * rgba.blue;
	clr.alpha = alpha * rgba.alpha;
	return clr;
}

//重载 "*" 运算符,
inline CFloatColor CFloatColor::operator * (float fc)
{
	CFloatColor clr;
	clr.red =   red   * fc;
	clr.green = green * fc;
	clr.blue =  blue  * fc;
	clr.alpha = alpha * fc;
	return clr;
}

//////////////////////
//重载 "*=" 运算符
inline CFloatColor CFloatColor::operator *= (const CFloatColor& color)
{
	red   *= color.red;
	green *= color.green;
	blue  *= color.blue;
	alpha *= color.alpha;
	return *this;
}

//重载 "*=" 运算符
inline CFloatColor CFloatColor::operator *= (const FLOATCOLORRGB& rgb)
{
	red   *= rgb.red;
	green *= rgb.green;
	blue  *= rgb.blue;
	return *this;
}

//重载 "*=" 运算符,
inline CFloatColor CFloatColor::operator *= (const FLOATCOLORRGBA& rgba)
{
	red   *= rgba.red;
	green *= rgba.green;
	blue  *= rgba.blue;
	alpha *= rgba.alpha;
	return *this;
}

//重载 "*=" 运算符,
inline CFloatColor CFloatColor::operator *= (float fc)
{
	red   *= fc;
	green *= fc;
	blue  *= fc;
	alpha *= fc;
	return *this;
}


//////////////////////////////////////////////////////////////////////////////////////////////
//
//					  颜色归一化处理
//
//////////////////////////////////////////////////////////////////////////////////////////////

inline CFloatColor CFloatColor::Clamp()
{
	CFloatColor clr;
	clr.red = (red < 0.0f) ? 0.0f : ((red > 1.0f) ? 1.0f : red);
	clr.green = (green < 0.0f) ? 0.0f : ((green > 1.0f) ? 1.0f : green);
	clr.blue = (blue < 0.0f) ? 0.0f : ((blue > 1.0f) ? 1.0f : blue);
	clr.alpha = (alpha < 0.0f) ? 0.0f : ((alpha > 1.0f) ? 1.0f : alpha);
	return clr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -