CColor类封装[建议收藏]

CColor类封装2.Color.cpp

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

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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;
}

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flume使用教程_三阶魔方初级入门教程详细图解

    flume使用教程_三阶魔方初级入门教程详细图解文章目录1.Flume概述1.1Flume定义1.Flume概述1.1Flume定义  

    2025年8月1日
    1
  • token多平台身份认证架构设计思路

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:哈莫 cnblogs.com/beer/p/6029861.html 1、概述 在存在账号体系的信息系统中,对…

    2021年6月28日
    91
  • 【Hive】SQL语句大全

    【Hive】SQL语句大全文章目录库操作创建数据库查询数据库修改数据库删除数据库表操作创建表查看表修改表删除表内部表(管理表)和外部表两者的区别互相转换分区表创建分区表添加分区往分区表中添加数据查询分区表数据删除分区查看分区修复分区数据操作数据导入Load导入Insert插入Import导入数据查询基本查询Floor取整Like和RlikeDistinct去重GroupBy分组查询Having语句Join语…

    2022年5月19日
    43
  • ht1621b驱动显示原理_STM32H723ZGT6

    ht1621b驱动显示原理_STM32H723ZGT6这几天在写ht1621b显示LCD的程序,主芯片是Stm32f10的芯片。对于stm32和ht1621b的运用和操作本人是新手,属于赶鸭子上架,通过查看datasheet等资料和网上查看前人写的程序终

    2022年8月1日
    21
  • python 判断文件是否存在,删除文件

    python 判断文件是否存在,删除文件#判断文件是否存在,path为文件路径importosos.path.exists(path)#删除文件,path为文件路径importosos.remove(path)

    2022年6月18日
    43
  • 深信服SCSA认证知识点(2)[通俗易懂]

    深信服SCSA认证知识点(2)[通俗易懂]深信服SCSA认证1、IP数据报文在网络层选路时,是基于最长匹配的原则。2、SNMP依赖于IP协议工作的。3、IP报文头部中有一个TTL字段,该字段长度为7位。4、access端口只能发送untagged帧5、关于rip协议,路由器不可能转发条数为16的路由器条目给它的直连邻居。6、如果希望一台DHCP客户机总是获得一个固定的IP地址,需要在DHCP上为其设置IP作用域。7、关于HTTP相应状态码302为网页重定向。8、nslookup是Windows系统常用的dns测.

    2022年6月20日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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