00001
00005 #ifndef _COLORSPACE_H_
00006 #define _COLORSPACE_H_
00007
00008
00009 #ifdef __cplusplus
00010 extern "C" {
00011 #endif
00012
00016 typedef double num;
00017
00018
00020 #define WHITEPOINT_X 0.950456
00021 #define WHITEPOINT_Y 1.0
00022 #define WHITEPOINT_Z 1.088754
00023
00024
00025
00027 typedef struct
00028 {
00029 int NumStages;
00030 void (*Fun[2])(num*, num*, num*, num, num, num);
00031 } colortransform;
00032
00033 int GetColorTransform(colortransform *Trans, const char *TransformString);
00034 void ApplyColorTransform(colortransform Trans,
00035 num *D0, num *D1, num *D2, num S0, num S1, num S2);
00036
00037 void Rgb2Yuv(num *Y, num *U, num *V, num R, num G, num B);
00038 void Yuv2Rgb(num *R, num *G, num *B, num Y, num U, num V);
00039 void Rgb2Ycbcr(num *Y, num *Cb, num *Cr, num R, num G, num B);
00040 void Ycbcr2Rgb(num *R, num *G, num *B, num Y, num Cb, num Cr);
00041 void Rgb2Jpegycbcr(num *R, num *G, num *B, num Y, num Cb, num Cr);
00042 void Jpegycbcr2Rgb(num *R, num *G, num *B, num Y, num Cb, num Cr);
00043 void Rgb2Ypbpr(num *Y, num *Pb, num *Pr, num R, num G, num B);
00044 void Ypbpr2Rgb(num *R, num *G, num *B, num Y, num Pb, num Pr);
00045 void Rgb2Ydbdr(num *Y, num *Db, num *Dr, num R, num G, num B);
00046 void Ydbdr2Rgb(num *R, num *G, num *B, num Y, num Db, num Dr);
00047 void Rgb2Yiq(num *Y, num *I, num *Q, num R, num G, num B);
00048 void Yiq2Rgb(num *R, num *G, num *B, num Y, num I, num Q);
00049
00050 void Rgb2Hsv(num *H, num *S, num *V, num R, num G, num B);
00051 void Hsv2Rgb(num *R, num *G, num *B, num H, num S, num V);
00052 void Rgb2Hsl(num *H, num *S, num *L, num R, num G, num B);
00053 void Hsl2Rgb(num *R, num *G, num *B, num H, num S, num L);
00054 void Rgb2Hsi(num *H, num *S, num *I, num R, num G, num B);
00055 void Hsi2Rgb(num *R, num *G, num *B, num H, num S, num I);
00056
00057 void Rgb2Xyz(num *X, num *Y, num *Z, num R, num G, num B);
00058 void Xyz2Rgb(num *R, num *G, num *B, num X, num Y, num Z);
00059 void Xyz2Lab(num *L, num *a, num *b, num X, num Y, num Z);
00060 void Lab2Xyz(num *X, num *Y, num *Z, num L, num a, num b);
00061 void Xyz2Luv(num *L, num *u, num *v, num X, num Y, num Z);
00062 void Luv2Xyz(num *X, num *Y, num *Z, num L, num u, num v);
00063 void Xyz2Lch(num *L, num *C, num *H, num X, num Y, num Z);
00064 void Lch2Xyz(num *X, num *Y, num *Z, num L, num C, num H);
00065 void Xyz2Cat02lms(num *L, num *M, num *S, num X, num Y, num Z);
00066 void Cat02lms2Xyz(num *X, num *Y, num *Z, num L, num M, num S);
00067
00068 void Rgb2Lab(num *L, num *a, num *b, num R, num G, num B);
00069 void Lab2Rgb(num *R, num *G, num *B, num L, num a, num b);
00070 void Rgb2Luv(num *L, num *u, num *v, num R, num G, num B);
00071 void Luv2Rgb(num *R, num *G, num *B, num L, num u, num v);
00072 void Rgb2Lch(num *L, num *C, num *H, num R, num G, num B);
00073 void Lch2Rgb(num *R, num *G, num *B, num L, num C, num H);
00074 void Rgb2Cat02lms(num *L, num *M, num *S, num R, num G, num B);
00075 void Cat02lms2Rgb(num *R, num *G, num *B, num L, num M, num S);
00076
00077
00078 #ifdef __cplusplus
00079 }
00080 #endif
00081
00082
00083 #endif