Opgaver i denne lektion   Gå til annoteret slide, hvor denne opgave er tilknyttet -- Tastaturgenvej: 'u'   Alfabetisk indeks   Kursets hjemmeside   

Opgaveløsning:
RGB Pixels


Her er der en løsning på opgaven, som baserer sig på brug af de bit-manipulerende operatorer i C:

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


Det er også muligt at bruge aritmetiske operator for at løse problemet:

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


Her er header filen pixel.h:

/* 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);