#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 |
|
|
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); \
} \
} |
|
|
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]; \
} \
} |
|
|
|
|
|
|
|
|
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; \
} \
} |
|
|
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; \
} \
} |
|
|
|
|
|
|
|
|
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); \
} \
} |
|
|
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]; \
} \
} |
|
|
|
|
|
|
|
|
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); \
} \
} |
|
|
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; \
} \
} |
|
|
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; \
} \
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.18