Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

Pixel.cc File Reference

#include "fl/image.h"
#include "fl/pi.h"
#include <math.h>
#include <algorithm>
#include <endian.h>

Compounds

union  Int2Char

Defines

#define redWeight   76
#define greenWeight   150
#define blueWeight   29
#define totalWeight   255
#define redToY   0.2126
#define greenToY   0.7152
#define blueToY   0.0722
#define RGBBits2GrayChar(fromSize)
#define RGBBits2GrayFloat(imageSize)
#define RGBBits2GrayDouble(imageSize)
#define Bits2Bits(fromSize, toSize, fromRed, fromGreen, fromBlue, fromAlpha, toRed, toGreen, toBlue, toAlpha)
#define OddBits2Bits(toSize, fromRed, fromGreen, fromBlue, fromAlpha, toRed, toGreen, toBlue, toAlpha)
#define Bits2OddBits(fromSize, fromRed, fromGreen, fromBlue, fromAlpha, toRed, toGreen, toBlue, toAlpha)
#define OddBits2OddBits(fromRed, fromGreen, fromBlue, fromAlpha, toRed, toGreen, toBlue, toAlpha)
#define GrayFloat2Bits(fromSize, toSize)
#define GrayFloat2OddBits(fromSize)

Variables

const float root32 = sqrtf (3.0f) / 2.0f
const float onesixth = 1.0f / 6.0f
const float onethird = 1.0f / 3.0f
const float twothirds = 2.0f / 3.0f

Define Documentation

#define Bits2Bits fromSize,
toSize,
fromRed,
fromGreen,
fromBlue,
fromAlpha,
toRed,
toGreen,
toBlue,
toAlpha   
 

Value:

{ \
  unsigned fromSize * fromPixel = (unsigned fromSize *) image.buffer; \
  unsigned toSize *   toPixel   = (unsigned toSize *)   result.buffer; \
  unsigned toSize *   end       = toPixel + result.width * result.height; \
  while (toPixel < end) \
  { \
    unsigned int r = *fromPixel & fromRed; \
        unsigned int g = *fromPixel & fromGreen; \
        unsigned int b = *fromPixel & fromBlue; \
        unsigned int a = *fromPixel & fromAlpha; \
    fromPixel++; \
        *toPixel++ =   ((redShift   > 0 ? r << redShift   : r >> -redShift)   & toRed) \
                         | ((greenShift > 0 ? g << greenShift : g >> -greenShift) & toGreen) \
                         | ((blueShift  > 0 ? b << blueShift  : b >> -blueShift)  & toBlue) \
                         | ((alphaShift > 0 ? a << alphaShift : a >> -alphaShift) & toAlpha); \
  } \
}

#define Bits2OddBits fromSize,
fromRed,
fromGreen,
fromBlue,
fromAlpha,
toRed,
toGreen,
toBlue,
toAlpha   
 

Value:

{ \
  unsigned fromSize * fromPixel = (unsigned fromSize *) image.buffer; \
  unsigned char *     toPixel   = (unsigned char *)     result.buffer; \
  unsigned char *     end       = toPixel + result.width * result.height * 3; \
  while (toPixel < end) \
  { \
    unsigned int r = *fromPixel & fromRed; \
        unsigned int g = *fromPixel & fromGreen; \
        unsigned int b = *fromPixel & fromBlue; \
        unsigned int a = *fromPixel & fromAlpha; \
    fromPixel++; \
    Int2Char t; \
        t.all =   ((redShift   > 0 ? r << redShift   : r >> -redShift)   & toRed) \
                    | ((greenShift > 0 ? g << greenShift : g >> -greenShift) & toGreen) \
                    | ((blueShift  > 0 ? b << blueShift  : b >> -blueShift)  & toBlue) \
                    | ((alphaShift > 0 ? a << alphaShift : a >> -alphaShift) & toAlpha); \
    *toPixel++ = t.piece[0]; \
    *toPixel++ = t.piece[1]; \
    *toPixel++ = t.piece[2]; \
  } \
}

#define blueToY   0.0722
 

#define blueWeight   29
 

#define GrayFloat2Bits fromSize,
toSize   
 

Value:

{ \
  fromSize *        fromPixel = (fromSize *)        image.buffer; \
  unsigned toSize * toPixel   = (unsigned toSize *) result.buffer; \
  unsigned toSize * end       = toPixel + result.width * result.height; \
  while (toPixel < end) \
  { \
        fromSize v = min (max (*fromPixel++, (fromSize) 0.0), (fromSize) 1.0); \
        delinearize (v); \
        unsigned int t = (unsigned int) (v * (255 << 8)); \
        *toPixel++ =   ((redShift   > 0 ? t << redShift   : t >> -redShift)   & redMask) \
                     | ((greenShift > 0 ? t << greenShift : t >> -greenShift) & greenMask) \
                 | ((blueShift  > 0 ? t << blueShift  : t >> -blueShift)  & blueMask) \
                 | alphaMask; \
  } \
}

#define GrayFloat2OddBits fromSize   
 

Value:

{ \
  fromSize *      fromPixel = (fromSize *)      image.buffer; \
  unsigned char * toPixel   = (unsigned char *) result.buffer; \
  unsigned char * end       = toPixel + result.width * result.height * 3; \
  while (toPixel < end) \
  { \
        fromSize v = min (max (*fromPixel++, (fromSize) 0.0), (fromSize) 1.0); \
        delinearize (v); \
        unsigned int t = (unsigned int) (v * (255 << 8)); \
        t =   ((redShift   > 0 ? t << redShift   : t >> -redShift)   & redMask) \
            | ((greenShift > 0 ? t << greenShift : t >> -greenShift) & greenMask) \
        | ((blueShift  > 0 ? t << blueShift  : t >> -blueShift)  & blueMask) \
        | alphaMask; \
    *toPixel++ =  t        & 0xFF; \
    *toPixel++ = (t >>= 8) & 0xFF; \
    *toPixel++ = (t >>  8) & 0xFF; \
  } \
}

#define greenToY   0.7152
 

#define greenWeight   150
 

#define OddBits2Bits toSize,
fromRed,
fromGreen,
fromBlue,
fromAlpha,
toRed,
toGreen,
toBlue,
toAlpha   
 

Value:

{ \
  unsigned char *   fromPixel = (unsigned char *)   image.buffer; \
  unsigned toSize * toPixel   = (unsigned toSize *) result.buffer; \
  unsigned toSize * end       = toPixel + result.width * result.height; \
  while (toPixel < end) \
  { \
    Int2Char t; \
    t.piece[0] = *fromPixel++; \
    t.piece[1] = *fromPixel++; \
    t.piece[2] = *fromPixel++; \
    unsigned int r = t.all & fromRed; \
        unsigned int g = t.all & fromGreen; \
        unsigned int b = t.all & fromBlue; \
        unsigned int a = t.all & fromAlpha; \
        *toPixel++ =   ((redShift   > 0 ? r << redShift   : r >> -redShift)   & toRed) \
                         | ((greenShift > 0 ? g << greenShift : g >> -greenShift) & toGreen) \
                         | ((blueShift  > 0 ? b << blueShift  : b >> -blueShift)  & toBlue) \
                         | ((alphaShift > 0 ? a << alphaShift : a >> -alphaShift) & toAlpha); \
  } \
}

#define OddBits2OddBits fromRed,
fromGreen,
fromBlue,
fromAlpha,
toRed,
toGreen,
toBlue,
toAlpha   
 

Value:

{ \
  unsigned char * fromPixel = (unsigned char *) image.buffer; \
  unsigned char * toPixel   = (unsigned char *) result.buffer; \
  unsigned char * end       = toPixel + result.width * result.height * 3; \
  while (toPixel < end) \
  { \
    Int2Char t; \
    t.piece[0] = *fromPixel++; \
    t.piece[1] = *fromPixel++; \
    t.piece[2] = *fromPixel++; \
    unsigned int r = t.all & fromRed; \
        unsigned int g = t.all & fromGreen; \
        unsigned int b = t.all & fromBlue; \
        unsigned int a = t.all & fromAlpha; \
        t.all =   ((redShift   > 0 ? r << redShift   : r >> -redShift)   & toRed) \
                    | ((greenShift > 0 ? g << greenShift : g >> -greenShift) & toGreen) \
                    | ((blueShift  > 0 ? b << blueShift  : b >> -blueShift)  & toBlue) \
                    | ((alphaShift > 0 ? a << alphaShift : a >> -alphaShift) & toAlpha); \
    *toPixel++ = t.piece[0]; \
    *toPixel++ = t.piece[1]; \
    *toPixel++ = t.piece[2]; \
  } \
}

#define redToY   0.2126
 

#define redWeight   76
 

#define RGBBits2GrayChar fromSize   
 

Value:

{ \
    unsigned fromSize * fromPixel = (unsigned fromSize *) image.buffer; \
    unsigned char * toPixel       = (unsigned char *)     result.buffer; \
    unsigned char * end           = toPixel + result.width * result.height; \
    while (toPixel < end) \
    { \
      unsigned int r = *fromPixel & that->redMask; \
      unsigned int g = *fromPixel & that->greenMask; \
          unsigned int b = *fromPixel & that->blueMask; \
      fromPixel++; \
          *toPixel++ = (  (redShift   > 0 ? r << redShift   : r >> -redShift)   * redWeight \
                        + (greenShift > 0 ? g << greenShift : g >> -greenShift) * greenWeight \
                        + (blueShift  > 0 ? b << blueShift  : b >> -blueShift)  * blueWeight \
                       ) / (totalWeight << 8); \
    } \
  }

#define RGBBits2GrayDouble imageSize   
 

Value:

{ \
    unsigned imageSize * fromPixel = (unsigned imageSize *) image.buffer; \
    double *             toPixel   = (double *)             result.buffer; \
    double *             end       = toPixel + result.width * result.height; \
        while (toPixel < end) \
    { \
          unsigned int r = *fromPixel & that->redMask; \
          unsigned int g = *fromPixel & that->greenMask; \
          unsigned int b = *fromPixel & that->blueMask; \
      fromPixel++; \
          double fr = (redShift   > 0 ? r << redShift   : r >> -redShift)   / 255.0; \
          double fg = (greenShift > 0 ? g << greenShift : g >> -greenShift) / 255.0; \
          double fb = (blueShift  > 0 ? b << blueShift  : b >> -blueShift)  / 255.0; \
          linearize (fr); \
          linearize (fg); \
          linearize (fb); \
          *toPixel++ = redToY * fr + greenToY * fg + blueToY * fb; \
        } \
  }

#define RGBBits2GrayFloat imageSize   
 

Value:

{ \
    unsigned imageSize * fromPixel = (unsigned imageSize *) image.buffer; \
    float *              toPixel   = (float *)              result.buffer; \
    float *              end       = toPixel + result.width * result.height; \
        while (toPixel < end) \
    { \
          unsigned int r = *fromPixel & that->redMask; \
          unsigned int g = *fromPixel & that->greenMask; \
          unsigned int b = *fromPixel & that->blueMask; \
      fromPixel++; \
          float fr = (redShift   > 0 ? r << redShift   : r >> -redShift)   / 255.0f; \
          float fg = (greenShift > 0 ? g << greenShift : g >> -greenShift) / 255.0f; \
          float fb = (blueShift  > 0 ? b << blueShift  : b >> -blueShift)  / 255.0f; \
          linearize (fr); \
          linearize (fg); \
          linearize (fb); \
          *toPixel++ = redToY * fr + greenToY * fg + blueToY * fb; \
        } \
  }

#define totalWeight   255
 


Variable Documentation

const float onesixth = 1.0f / 6.0f
 

const float onethird = 1.0f / 3.0f
 

const float root32 = sqrtf (3.0f) / 2.0f
 

const float twothirds = 2.0f / 3.0f
 


Generated on Thu Dec 9 17:13:25 2004 for fl by doxygen1.2.18