Her er der en løsning på opgaven, som baserer sig på brug af de bit-manipulerende operatorer i C: Det er også muligt at bruge aritmetiske operator for at løse problemet: Her er header filen pixel.h:#include "pixel.h"
pixel make_pixel(unsigned int red, unsigned int green, unsigned int blue){
return (1 << 24) | (red << 16) | (green << 8) | blue;
}
unsigned int get_red(pixel p){
return (p >> 16) & 0xff;
}
unsigned int get_green(pixel p){
return (p >> 8) & 0xff;
}
unsigned int get_blue(pixel p){
return p & 0xff;
}
#include "pixel.h"
pixel make_pixel(unsigned int red, unsigned int green, unsigned int blue){
return 1 * 256 * 256 * 256 +
red * 256 * 256 +
green * 256 +
blue;
}
unsigned int get_red(pixel p){
return (p / (256 * 256)) % 256;
}
unsigned int get_green(pixel p){
return (p / 256) % 256;
}
unsigned int get_blue(pixel p){
return p % 256;
}
/* PIXELS - A pixel represents a RGB color. */
/** A new type that represents a single RGB pixel */
typedef unsigned int pixel;
/** The constructor of a pixel in terms of red, green and blue (between 0 and 255) */
pixel make_pixel(unsigned int red, unsigned int green, unsigned int blue);
/** Access and return the red component of the pixel p */
unsigned int get_red(pixel p);
/** Access and return the green component of the pixel p */
unsigned int get_green(pixel p);
/** Access and return the blue component of the pixel p */
unsigned int get_blue(pixel p);