// Codificación de colores
// aritmética de bits
// (C) 2009 Con Clase
// Salvador Pozo
#include <iostream>
using namespace std;
typedef unsigned long int color ;
typedef unsigned char BYTE;
typedef unsigned long int DWORD;
inline BYTE ObtenerValorRojo(color);
inline BYTE ObtenerValorVerde(color);
inline BYTE ObtenerValorAzul(color);
inline BYTE ObtenerValorAlfa(color);
inline color ModificarValorRojo(color, BYTE);
inline color ModificarValorVerde(color, BYTE);
inline color ModificarValorAzul(color, BYTE);
inline color ModificarValorAlfa(color, BYTE);
int main() {
color c1 = 0x80fedc12;
cout << "Color: " << dec << c1 << " - " << hex << c1 << endl;
cout << "Rojo: " << dec << (int)ObtenerValorRojo(c1) << " - " << hex << (int)ObtenerValorRojo(c1) << endl;
cout << "Verde: " << dec << (int)ObtenerValorVerde(c1) << " - " << hex << (int)ObtenerValorVerde(c1) << endl;
cout << "Azul: " << dec << (int)ObtenerValorAzul(c1) << " - " << hex << (int)ObtenerValorAzul(c1) << endl;
cout << "Alfa: " << dec << (int)ObtenerValorAlfa(c1) << " - " << hex << (int)ObtenerValorAlfa(c1) << endl;
c1 = ModificarValorRojo(c1, 0x42);
c1 = ModificarValorVerde(c1, 0xde);
cout << "Color: " << dec << c1 << " - " << hex << c1 << endl;
cout << "Rojo: " << dec << (int)ObtenerValorRojo(c1) << " - " << hex << (int)ObtenerValorRojo(c1) << endl;
cout << "Verde: " << dec << (int)ObtenerValorVerde(c1) << " - " << hex << (int)ObtenerValorVerde(c1) << endl;
cout << "Azul: " << dec << (int)ObtenerValorAzul(c1) << " - " << hex << (int)ObtenerValorAzul(c1) << endl;
cout << "Alfa: " << dec << (int)ObtenerValorAlfa(c1) << " - " << hex << (int)ObtenerValorAlfa(c1) << endl;
return 0;
}
inline BYTE ObtenerValorRojo(color c) {
return (BYTE)(c);
}
inline BYTE ObtenerValorVerde(color c) {
return (BYTE)(c >> 8);
}
inline BYTE ObtenerValorAzul(color c) {
return (BYTE)(c >> 16);
}
inline BYTE ObtenerValorAlfa(color c) {
return (BYTE)(c >> 24);
}
inline color ModificarValorRojo(color c, BYTE r) {
return (c & 0xffffff00) | (color)r;
}
inline color ModificarValorVerde(color c, BYTE g) {
return (c & 0xffff00ff) | (color)(g << 8);
}
inline color ModificarValorAzul(color c, BYTE b) {
return (c & 0xff00ffff) | (color)(b << 16);
}
inline color ModificarValorAlfa(color c, BYTE a) {
return (c & 0x00ffffff) | (color)(a << 24);
}