00001
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _GAN_PIXEL_H
00030 #define _GAN_PIXEL_H
00031
00032 #include <gandalf/common/misc_defs.h>
00033 #include <gandalf/common/bit_array.h>
00034 #include <gandalf/linalg/2vector.h>
00035 #include <gandalf/linalg/2vectorf.h>
00036 #include <gandalf/linalg/3vector.h>
00037 #include <gandalf/linalg/3vectorf.h>
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00056 typedef enum { GAN_GREY_LEVEL_IMAGE,
00057 GAN_GREY_LEVEL_ALPHA_IMAGE,
00059 GAN_RGB_COLOUR_IMAGE,
00060 GAN_RGB_COLOUR_ALPHA_IMAGE,
00062 GAN_VECTOR_FIELD_2D,
00063 GAN_VECTOR_FIELD_3D }
00064 Gan_ImageFormat;
00065
00069 typedef struct Gan_GLAPixel_uc
00070 {
00071 unsigned char I,
00072 A;
00073 } Gan_GLAPixel_uc;
00074
00078 typedef struct Gan_GLAPixel_s
00079 {
00080 short I,
00081 A;
00082 } Gan_GLAPixel_s;
00083
00087 typedef struct Gan_GLAPixel_us
00088 {
00089 unsigned short I,
00090 A;
00091 } Gan_GLAPixel_us;
00092
00096 typedef struct Gan_GLAPixel_i
00097 {
00098 int I,
00099 A;
00100 } Gan_GLAPixel_i;
00101
00105 typedef struct Gan_GLAPixel_ui
00106 {
00107 unsigned int I,
00108 A;
00109 } Gan_GLAPixel_ui;
00110
00114 typedef struct Gan_GLAPixel_f
00115 {
00116 float I,
00117 A;
00118 } Gan_GLAPixel_f;
00119
00123 typedef struct Gan_GLAPixel_d
00124 {
00125 double I,
00126 A;
00127 } Gan_GLAPixel_d;
00128
00132 typedef struct Gan_RGBPixel_uc
00133 {
00134 unsigned char R,
00135 G,
00136 B;
00137 } Gan_RGBPixel_uc;
00138
00142 typedef struct Gan_RGBPixel_s
00143 {
00144 short R,
00145 G,
00146 B;
00147 } Gan_RGBPixel_s;
00148
00152 typedef struct Gan_RGBPixel_us
00153 {
00154 unsigned short R,
00155 G,
00156 B;
00157 } Gan_RGBPixel_us;
00158
00162 typedef struct Gan_RGBPixel_i
00163 {
00164 int R,
00165 G,
00166 B;
00167 } Gan_RGBPixel_i;
00168
00172 typedef struct Gan_RGBPixel_ui
00173 {
00174 unsigned int R,
00175 G,
00176 B;
00177 } Gan_RGBPixel_ui;
00178
00182 typedef struct Gan_RGBPixel_f
00183 {
00184 float R,
00185 G,
00186 B;
00187 } Gan_RGBPixel_f;
00188
00192 typedef struct Gan_RGBPixel_d
00193 {
00194 double R,
00195 G,
00196 B;
00197 } Gan_RGBPixel_d;
00198
00202 typedef struct Gan_RGBAPixel_uc
00203 {
00204 unsigned char R,
00205 G,
00206 B,
00207 A;
00208 } Gan_RGBAPixel_uc;
00209
00213 typedef struct Gan_RGBAPixel_s
00214 {
00215 short R,
00216 G,
00217 B,
00218 A;
00219 } Gan_RGBAPixel_s;
00220
00224 typedef struct Gan_RGBAPixel_us
00225 {
00226 unsigned short R,
00227 G,
00228 B,
00229 A;
00230 } Gan_RGBAPixel_us;
00231
00235 typedef struct Gan_RGBAPixel_i
00236 {
00237 int R,
00238 G,
00239 B,
00240 A;
00241 } Gan_RGBAPixel_i;
00242
00246 typedef struct Gan_RGBAPixel_ui
00247 {
00248 unsigned int R,
00249 G,
00250 B,
00251 A;
00252 } Gan_RGBAPixel_ui;
00253
00257 typedef struct Gan_RGBAPixel_f
00258 {
00259 float R,
00260 G,
00261 B,
00262 A;
00263 } Gan_RGBAPixel_f;
00264
00268 typedef struct Gan_RGBAPixel_d
00269 {
00270 double R,
00271 G,
00272 B,
00273 A;
00274 } Gan_RGBAPixel_d;
00275
00276 #if (SIZEOF_CHAR == 1)
00277
00280 typedef struct Gan_GLAPixel_uc Gan_GLAPixel_ui8;
00281
00285 typedef struct Gan_RGBPixel_uc Gan_RGBPixel_ui8;
00286
00291 typedef struct Gan_RGBAPixel_uc Gan_RGBAPixel_ui8;
00292 #else
00293 #error "8-bit type conflict"
00294 #endif
00295
00296 #if (SIZEOF_SHORT == 2)
00297
00301 typedef struct Gan_GLAPixel_us Gan_GLAPixel_ui16;
00302
00306 typedef struct Gan_RGBPixel_us Gan_RGBPixel_ui16;
00307
00312 typedef struct Gan_RGBAPixel_us Gan_RGBAPixel_ui16;
00313 #else
00314 #error "16-bit type conflict"
00315 #endif
00316
00317 #if (SIZEOF_INT == 4)
00318
00322 typedef struct Gan_GLAPixel_ui Gan_GLAPixel_ui32;
00323
00327 typedef struct Gan_RGBPixel_ui Gan_RGBPixel_ui32;
00328
00333 typedef struct Gan_RGBAPixel_ui Gan_RGBAPixel_ui32;
00334 #else
00335 #error "32-bit type conflict"
00336 #endif
00337
00341 typedef struct Gan_Pixel
00342 {
00344 Gan_ImageFormat format;
00345
00347 Gan_Type type;
00348
00350 union
00351 {
00353 union
00354 {
00355 unsigned char uc;
00356 short s;
00357 unsigned short us;
00358 int i;
00359 unsigned int ui;
00360 double d;
00361 float f;
00362 Gan_Bool b;
00363 void *p;
00364
00365 gan_ui8 ui8;
00366 gan_ui16 ui16;
00367 gan_ui32 ui32;
00368 } gl;
00369
00371 union
00372 {
00373 Gan_GLAPixel_uc uc;
00374 Gan_GLAPixel_s s;
00375 Gan_GLAPixel_us us;
00376 Gan_GLAPixel_i i;
00377 Gan_GLAPixel_ui ui;
00378 Gan_GLAPixel_d d;
00379 Gan_GLAPixel_f f;
00380
00381 Gan_GLAPixel_ui8 ui8;
00382 Gan_GLAPixel_ui16 ui16;
00383 Gan_GLAPixel_ui32 ui32;
00384 } gla;
00385
00387 union
00388 {
00389 Gan_RGBPixel_uc uc;
00390 Gan_RGBPixel_s s;
00391 Gan_RGBPixel_us us;
00392 Gan_RGBPixel_i i;
00393 Gan_RGBPixel_ui ui;
00394 Gan_RGBPixel_d d;
00395 Gan_RGBPixel_f f;
00396
00397 Gan_RGBPixel_ui8 ui8;
00398 Gan_RGBPixel_ui16 ui16;
00399 Gan_RGBPixel_ui32 ui32;
00400 } rgb;
00401
00403 union
00404 {
00405 Gan_RGBAPixel_uc uc;
00406 Gan_RGBAPixel_s s;
00407 Gan_RGBAPixel_us us;
00408 Gan_RGBAPixel_i i;
00409 Gan_RGBAPixel_ui ui;
00410 Gan_RGBAPixel_d d;
00411 Gan_RGBAPixel_f f;
00412
00413 Gan_RGBAPixel_ui8 ui8;
00414 Gan_RGBAPixel_ui16 ui16;
00415 Gan_RGBAPixel_ui32 ui32;
00416 } rgba;
00417
00419 union
00420 {
00421 Gan_Vector2_f f;
00422 Gan_Vector2 d;
00423 Gan_Vector2_s s;
00424 Gan_Vector2_i i;
00425 } vfield2D;
00426
00428 union
00429 {
00430 Gan_Vector3_f f;
00431 Gan_Vector3 d;
00432 Gan_Vector3_s s;
00433 Gan_Vector3_i i;
00434 } vfield3D;
00435 } data;
00436 } Gan_Pixel;
00437
00438 unsigned char gan_pixel_rgbuc_to_yuc ( Gan_RGBPixel_uc *rgb );
00439 unsigned short gan_pixel_rgbuc_to_yus ( Gan_RGBPixel_uc *rgb );
00440 unsigned int gan_pixel_rgbuc_to_yui ( Gan_RGBPixel_uc *rgb );
00441 unsigned char gan_pixel_rgbus_to_yuc ( Gan_RGBPixel_us *rgb );
00442 unsigned short gan_pixel_rgbus_to_yus ( Gan_RGBPixel_us *rgb );
00443 float gan_pixel_rgbui_to_yf ( Gan_RGBPixel_ui *rgb );
00444 float gan_pixel_rgbf_to_yf ( Gan_RGBPixel_f *rgb );
00445 double gan_pixel_rgbd_to_yd ( Gan_RGBPixel_d *rgb );
00446 unsigned char gan_pixel_rgbauc_to_yuc ( Gan_RGBAPixel_uc *rgba );
00447 unsigned short gan_pixel_rgbauc_to_yus ( Gan_RGBAPixel_uc *rgba );
00448 unsigned int gan_pixel_rgbauc_to_yui ( Gan_RGBAPixel_uc *rgba );
00449 unsigned char gan_pixel_rgbaus_to_yuc ( Gan_RGBAPixel_us *rgba );
00450 unsigned short gan_pixel_rgbaus_to_yus ( Gan_RGBAPixel_us *rgba );
00451 float gan_pixel_rgbaui_to_yf ( Gan_RGBAPixel_ui *rgba );
00452 float gan_pixel_rgbaf_to_yf ( Gan_RGBAPixel_f *rgba );
00453 double gan_pixel_rgbad_to_yd ( Gan_RGBAPixel_d *rgba );
00454
00455 Gan_Bool gan_image_convert_pixel ( Gan_Pixel *inpix,
00456 Gan_ImageFormat format, Gan_Type type,
00457 Gan_Pixel *outpix, int *error_code );
00458 double gan_image_convert_scale ( Gan_Type gtFromType, Gan_Type gtToType );
00459 Gan_Bool gan_image_offset_pixel_q ( Gan_Pixel *pixel, double offset,
00460 Gan_Pixel *offset_pixel );
00461 Gan_Bool gan_image_scale_pixel_q ( Gan_Pixel *pixel, double scale,
00462 Gan_Pixel *scaled_pixel );
00463 Gan_Bool gan_image_divide_pixel_q ( Gan_Pixel *pixel, double scale,
00464 Gan_Pixel *scaled_pixel );
00465 Gan_Bool gan_image_fill_zero_pixel ( Gan_Pixel *pixel );
00466
00470 unsigned char gan_pixel_us_to_uc ( unsigned short x );
00471
00475 unsigned char gan_pixel_ui_to_uc ( unsigned x );
00476
00482 unsigned char gan_pixel_f_to_uc ( float x );
00483
00489 unsigned char gan_pixel_d_to_uc ( double x );
00490
00494 unsigned short gan_pixel_uc_to_us ( unsigned char x );
00495
00499 unsigned short gan_pixel_ui_to_us ( unsigned x );
00500
00504 short gan_pixel_i_to_s ( int x );
00505
00511 unsigned short gan_pixel_f_to_us ( float x );
00512
00518 unsigned short gan_pixel_d_to_us ( double x );
00519
00523 unsigned int gan_pixel_uc_to_ui ( unsigned char x );
00524
00528 unsigned int gan_pixel_us_to_ui ( unsigned short x );
00529
00533 int gan_pixel_s_to_i ( short x );
00534
00540 unsigned int gan_pixel_f_to_ui ( float x );
00541
00547 unsigned int gan_pixel_d_to_ui ( double x );
00548
00552 float gan_pixel_uc_to_f ( unsigned char x );
00553
00557 float gan_pixel_us_to_f ( unsigned short x );
00558
00562 float gan_pixel_ui_to_f ( unsigned int x );
00563
00567 double gan_pixel_uc_to_d ( unsigned char x );
00568
00572 double gan_pixel_us_to_d ( unsigned short x );
00573
00577 double gan_pixel_ui_to_d ( unsigned int x );
00578
00584 int gan_pixel_f_to_i ( float x );
00585
00591 int gan_pixel_d_to_i ( double x );
00592
00598 short gan_pixel_f_to_s ( float x );
00599
00605 short gan_pixel_d_to_s ( double x );
00606
00610 float gan_pixel_s_to_f ( short x );
00611
00615 double gan_pixel_s_to_d ( short x );
00616
00620 float gan_pixel_i_to_f ( int x );
00621
00625 double gan_pixel_i_to_d ( int x );
00626
00634 Gan_Bool gan_image_convert_pixel_q ( Gan_Pixel *inpix,
00635 Gan_ImageFormat format, Gan_Type type,
00636 Gan_Pixel *outpix );
00637
00645 Gan_Bool gan_image_convert_pixel_i ( Gan_Pixel *pix,
00646 Gan_ImageFormat format, Gan_Type type );
00647
00655 Gan_Bool gan_image_offset_pixel_i ( Gan_Pixel *pixel, double offset );
00656
00664 Gan_Bool gan_image_scale_pixel_i ( Gan_Pixel *pixel, double scale );
00665
00673 Gan_Bool gan_image_divide_pixel_i ( Gan_Pixel *pixel, double scale );
00674
00683 #ifdef __cplusplus
00684 }
00685 #endif
00686
00687 #endif