DWORD化されたRGBA値を人間が扱いやすいようにするクラス

DWORDの中身が、RGBAだとか、BGRAだとか、そういう内部フォーマットはいざ知らず、DWORDのままで色の値の加減算もろくにできやしないので、そういう問題へのソリューションとして、以下便利クラスを作成したメモ。
class Pix
{
public:
	Pix(DWORD col) {
		_r = col & 0x000000ff;
		_g = (col >> 8) & 0x000000ff;
		_b = (col >> 16) & 0x000000ff;
		_a = (col >> 24) & 0x000000ff;
	}
	Pix(int r, int g, int b, int a)
	{
		_r = r;
		_g = g;
		_b = b;
		_a = a;
	}
	~Pix(void) {}
	void operator += (const Pix& pix)
	{
		_r += pix._r;
		_g += pix._g;
		_b += pix._b;
		_a += pix._a;
	}
	void operator /= (const float val)
	{
		_r /= val;
		_g /= val;
		_b /= val;
		_a /= val;
	}
	Pix operator * (float val)
	{
		return Pix(_r*val, _g*val, _b*val, _a*val);
	}
	void clamp_0x00_0xff(void)
	{
		auto ata = [](int x) {
			if (x < 0)
				return 0;
			else
				return x;
		};
		auto atap = [](int x) {
			if (x > 255)
				return 255;
			else
				return x;
		};
		_r = ata(_r);
		_g = ata(_g);
		_b = ata(_b);
		_r = atap(_r);
		_g = atap(_g);
		_b = atap(_b);
		_a = 255;
	}
	DWORD GetValue(void)
	{
		return
			_r | (_g << 8) | (_b << 16) | (_a << 24);
	}
	int _r, _g, _b, _a;
};

具体的な使い方は、一つ前の記事を参照。