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)


相关推荐

  • null toarray php,解决Laravel5.5下的toArray问题

    null toarray php,解决Laravel5.5下的toArray问题作为一个有轻度强迫症且受ThinkPHP影响较深的PHP码农,总觉得Laravel5.5的DB::xxoo->get()->toArray()之后竟然还没得到我想要的ThinkPHP中的select()出来的数组,于是决定做一下修改。PS:出于尽量不影响原有框架的考虑,我是新建了一个方法叫getList来暂代toArray那不知所谓的返回结果,在没有找到更好的解决办法之前,暂时这么用着…

  • QT 5.9.0下载安装及配置教程

    QT 5.9.0下载安装及配置教程一、下载今天打算换一个QT安装版本,去官网看了一眼发现变成了在线安装。本来官方下载的就慢,现在更是雪上加霜,现在给大家推荐几种下载方式。1、国内镜像中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/北京理工大学:http://mirror.bit.edu….

  • 如何创建oracle数据表空间,oracle创建数据库/表空间

    如何创建oracle数据表空间,oracle创建数据库/表空间||||||||||||||||||||||||简略的说||||||||||||||||||||||||||||以管理员身份登录:1.首先,创建(新)用户:createuserusernameidentifiedbypassword;username:新用户名的用户名password:新用户的密码也可以不创建新用户,而仍然用以前的用户,如:继续利用scott用户2.创建表空间:create…

  • python excel转json json转excel[通俗易懂]

    python excel转json json转excel[通俗易懂]#-*-conding:utf-8-*-importopenpyxlfromopenpyxl.stylesimportPatternFill,Font,Alignment,Border,Sideimportopenpyxl.stylesasstyfromopenpyxlimportWorkbook,load_workbookimportjsonc…

  • ExecutorService详解[通俗易懂]

    ExecutorService详解[通俗易懂]前言    在我们的日常开发中,难免会使用到线程,部分还会用到多线程并发问题。我们知道,线程的创建和释放,需要占用不小的内存和资源。如果每次需要使用线程时,都new一个Thread的话,难免会造成资源的浪费,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。不利于扩展,比如如定时执行、定期执行、线程中断,所以很有必要了解下ExecutorService的使用。…

  • Maven 菜鸟教程 5 常用插件配置

    Maven 菜鸟教程 5 常用插件配置jdk编译插件jetty插件把maven项目配置为标准web项目插件

发表回复

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

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