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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2021最强Python学习教程,从零基础入门到精通

    2021最强Python学习教程,从零基础入门到精通你准备好了吗???areyouready???前言01.python介绍02.项目开发完整流程(详解版)03.项目开发流程(精简版)第一篇计算机核心基础01计算机组成原理第二篇编程语言01编程语言介绍第三篇python入门01python介绍及IDE集成开发环境02python是解释型的强类型动态语言03python语法之变量、常量04python语法之注释05python垃圾回收机制GC06Python语法入门之基本数据类型07Python语法

    2022年9月19日
    3
  • 身份管理系统与解决方案[通俗易懂]

    身份管理系统与解决方案[通俗易懂]身份管理的进化式发展身份管理的需求来自于不同部门安全服务解决方案框架身份管理解决方案整体架构典型企业安全身份管理逻辑架构新员工入职帐号创建员工入职服务–基于策略身份供应实现统一认证

    2022年8月4日
    6
  • mysql中的trace工具

    mysql中的trace工具

    2021年8月4日
    116
  • 大型仓库进销存管理系统php源代码,多仓版进销存管理系统PHP源码ERP仓库管理系统php网络版进销存源码…

    大型仓库进销存管理系统php源代码,多仓版进销存管理系统PHP源码ERP仓库管理系统php网络版进销存源码…该系统为PHP语言开发开源无限制独家优化版,购货,销货,仓库管理,商品管理,供应商管理,职员管理等非常多的功能。该ERP部署安装非常简单,只要要空间支持PHP上传到根目录就可简单安装就可。运行速度和数据解决效率都非常高,非常适合中小企业仓库管理使用!本系统运行环境php5.4以下最好是5.2.17或者者5.3.3支持IIS、apache不支持nginx安装文档:1、上传到网站根目录2、用p…

    2022年5月31日
    51
  • layui弹出层html,layer弹出层「建议收藏」

    layui弹出层html,layer弹出层「建议收藏」layer弹出层,怎么只让他弹出一次.在线等我昨天用这个插件的时候也有这个问题,弹出内容大了就居不了中。这是组件不完美的地方,他设置了top和left值,而且是固定的。这种弹出层都是绝对定位的所以没办法用margin:auto0神马的居中。解决方案主要两种:1.修改在浏览器里面调试模式。jquerylayer怎么弹出指定的html内元素一个基本的弹出层应该满足以下需CSS布局HTML小编…

    2022年7月13日
    15
  • Java反射机制:跟着代码学反射

    Java反射机制:跟着代码学反射微信搜索:码农StayUp主页地址:https://gozhuyinglong.github.io源码分享:https://github.com/gozhuyinglong/blog-demos1.前言在OOP的世界里,万物皆对象。也就是说,我们可以将任何东西抽象成一个对象。比如人,可以抽象成一个Person类,通过newPerson()来实例化一个对象;再比如鸭子,可以抽象成一个Duck类,也可以对其进行实例化……那么这一个个类本身是不是也可以抽象成一个类呢?Java提供了一个特殊的类..

    2022年5月20日
    33

发表回复

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

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