CColor类封装[建议收藏]

CColor类封装2.Color.cpp

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

CColor类封装[建议收藏]此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

CColor类封装

  1.  Color.h

  

#pragma once

#include <sstream>
#include <string>
using namespace std;

class CColor
{
public:
	CColor(void);
	~CColor(void);

	CColor(const CColor& color);
	CColor& operator=(const CColor& color);

	CColor(float, float, float);
	CColor(int, int, int);
	CColor(COLORREF clr);

	// 以两个逗号分隔的字符串
	CColor(const string& strColor);

public:
	COLORREF GetRGB();
	DWORD GetARGB();
	float GetR();
	float GetG();
	float GetB();
	void SetStrValue(const string& strColor);
	string GetStrValue();
	string Trans2Txt();

private:
	void ParseStrColor(const string& strColor);

private:
	byte m_tAlpha;
	float m_fRed;
	float m_fGreen;
	float m_fBlue;

};

  2. Color.cpp

  

#include "StdAfx.h"

#include "Color.h"

#include "Utils.h"


CColor::CColor(void) : m_tAlpha(255), m_fRed(.0f), m_fGreen(.0f), m_fBlue(.0f)
{
}

CColor::~CColor(void)
{
}

CColor::CColor( const CColor& color )
{
	*this = color;
}

CColor& CColor::operator=(const CColor& color )
{
	if (this == &color)
	{
		return *this;
	}

	m_tAlpha = color.m_tAlpha;
	m_fRed = color.m_fRed;
	m_fGreen = color.m_fGreen;
	m_fBlue = color.m_fBlue;

	return *this;
}

CColor::CColor( float fRed, float fGreen, float fBlue)
{
	m_tAlpha = 255;
	m_fRed   = fRed;
	m_fGreen = fGreen;
	m_fBlue  = fBlue;
}

CColor::CColor( int nRed, int nGreen, int nBlue)
{
	m_tAlpha = 255;
	m_fRed   = (float)nRed / 255;
	m_fGreen = (float)nGreen / 255;
	m_fBlue  = (float)nBlue / 255;
}

CColor::CColor( COLORREF clr )
{
	byte* p = (byte*)&clr;
	int nRed = *p++;
	int nGreen = *p++;
	int nBlue = *p++;

	m_tAlpha = 255;
	m_fRed   = (float)nRed / 255;
	m_fGreen = (float)nGreen / 255;
	m_fBlue  = (float)nBlue / 255;
}

COLORREF CColor::GetRGB() 
{
	COLORREF colorrrefRGB;
	colorrrefRGB = RGB(byte(m_fRed * 255), byte(m_fGreen * 255), byte(m_fBlue * 255));
	return colorrrefRGB;
}

DWORD CColor::GetARGB()
{
	byte tRed = byte(m_fRed * 255);
	byte tGreen = byte(m_fGreen * 255);
	byte tBlue = byte(m_fBlue * 255);

	return (((DWORD)(tBlue)   << 0)  |
		((DWORD)(tGreen)  << 8)  |
		((DWORD)(tRed)    << 16) |
		((DWORD)(m_tAlpha) << 24));
}

float CColor::GetR()
{
	return m_fRed;
}

float CColor::GetG()
{
	return m_fGreen;
}

float CColor::GetB()
{
	return m_fBlue;
}

/**
* @brief 解析颜色字符串
*
* 根据指定字符串解析出颜色的三个分量
* 字符串以逗号或空格分割,如"strR,strG,strB" 其中strR,strG和strB都在0.0到1.0间取值
* @param[in] const string& strColor
* @return void
*/
void CColor::SetStrValue( const string& strColor )
{
	ParseStrColor(strColor);
}

std::string CColor::GetStrValue()
{
	stringstream ss;
	ss << Float2Str(m_fRed) << ", ";
	ss << Float2Str(m_fGreen) << ", ";
	ss << Float2Str(m_fBlue);

	return ss.str();
}

std::string CColor::Trans2Txt()
{
	return GetStrValue();
}

void CColor::ParseStrColor( const string& strColor )
{
	string strTmpValue = strColor;
	TrimLineSpace(strTmpValue);

	string strSplitSymbol = ",";
	size_t nSplitPos = strTmpValue.find_first_of(strSplitSymbol);

	if (nSplitPos == string::npos)
	{
		strSplitSymbol = " ";
	}

	size_t nFirstPos = strTmpValue.find_first_of(strSplitSymbol);

	if (nFirstPos != string::npos)
	{
		string strValue = strTmpValue.substr(0, nFirstPos);
		m_fRed = Str2Float(strValue);

		strTmpValue = strTmpValue.substr(nFirstPos + 1, string::npos);
		TrimLineSpace(strTmpValue);

		nFirstPos = strTmpValue.find_first_of(strSplitSymbol);

		if (nFirstPos != string::npos)
		{
			strValue = strTmpValue.substr(0, nFirstPos);
			m_fGreen = Str2Float(strValue);
		}

		strTmpValue = strTmpValue.substr(nFirstPos + 1, string::npos);
		TrimLineSpace(strTmpValue);

		if (strTmpValue != "")
		{
			m_fBlue = Str2Float(strTmpValue);
		}
	}

	m_tAlpha = 255;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120242.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 传感器超声波雷达「建议收藏」

    传感器超声波雷达「建议收藏」转自:http://www.itsiwei.com/21962.html在上一次分享中,我介绍了毫米波雷达的原理、数据特性及优缺点。毫米波雷达的低环境敏感和低成本的特性使得其在ADAS和自动驾驶领域得到了广泛的应用。今天要介绍的是一款极其常见的传感器——超声波雷达。如果你觉得超声波雷达有些陌生,那么它还有一个更通俗的名字——倒车雷达。在倒车入库,慢慢挪动车子的过程中,在驾驶室内能听到”…

  • vm安装winme[通俗易懂]

    vm安装winme[通俗易懂]vm安装windowsme第一步,到msdn下载windowsme2.打开vm3.回到主页,点击创建新的虚拟机3.按典型4.下一步,按截图位置不要在c盘下一步完成h回车一直回车完整教程:https://www.bilibili.com/video/av9140535/我要去图书馆了,以后在把完整版发表…

  • java中voliate的讲解

    java中voliate的讲解Java并发编程:volatile关键字解析  volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java

  • 小米路由器3 opkg安装

    小米路由器3 opkg安装小米路由器3opkg安装1、复制opkg到小米路由的/data路径下。下载地址:http://sangbo.pub/soft/opkg/opkg2、修改/etc/opkg.conf文件,替换为以下内容:src/gzattitude_adjustment_basehttp://openwrt.sangbo.pub/barrier_breaker/14.07/ramips/mt7620a/

  • Jupyter notebook 报错 500 : Internal Server Error的解决方法「建议收藏」

    Jupyter notebook 报错 500 : Internal Server Error的解决方法「建议收藏」问题:输入jupyternotebook后再浏览器点击.ipynb文件报错500InternalServerError,异常如下图所示解决方法:1).先卸载jupyter并删除安装目录下的以jupyter开头的文件,再重新pipinstalljupyter安装jupyter,试验后再打开jupyternotebook,仍无法正常打开.i…

  • MySQL explain详解

    MySQL explain详解MySQLexplain详解Explain简介本文主要讲述如何通过explain命令获取select语句的执行计划,通过explain我们可以知道以下信息:表的读取顺序,数据读取操作

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号