00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <stdlib.h>
00038 #include <assert.h>
00039 #include "pixelformat.h"
00040
00041 #define isinrange(x,lo,hi) ( (x)>=(lo) && (x)<=(hi) )
00042
00043 #define SHIFTL(val,shift) ( (shift) >= 0 ? ((val)<<(shift)) : ((val)>>(-(shift))) )
00044 #define SHIFTR(val,shift) ( (shift) >= 0 ? ((val)>>(shift)) : ((val)<<(-(shift))) )
00045
00046
00047
00048 extern const gePixelFormat_Operations * gePixelFormat_Operations_Array;
00049
00050
00051
00052 GENESISAPI uint32 GENESISCC gePixelFormat_ComposePixel(gePixelFormat Format,int R,int G,int B,int A)
00053 {
00054 const gePixelFormat_Operations * ops;
00055 ops = &gePixelFormat_Operations_Array[Format];
00056 assert(ops);
00057 assert(ops->ComposePixel);
00058 return ops->ComposePixel(R,G,B,A);
00059 }
00060
00061 GENESISAPI void GENESISCC gePixelFormat_DecomposePixel(gePixelFormat Format,uint32 Pixel,int *R,int *G,int *B,int *A)
00062 {
00063 const gePixelFormat_Operations * ops;
00064 ops = &gePixelFormat_Operations_Array[Format];
00065 assert(ops);
00066 assert(ops->DecomposePixel);
00067 ops->DecomposePixel(Pixel,R,G,B,A);
00068 }
00069
00070 GENESISAPI uint32 GENESISCC gePixelFormat_GetPixel(gePixelFormat Format,uint8 **ppData)
00071 {
00072 const gePixelFormat_Operations * ops;
00073 ops = &gePixelFormat_Operations_Array[Format];
00074 assert(ops);
00075 assert(ops->GetPixel);
00076 return ops->GetPixel(ppData);
00077 }
00078
00079 GENESISAPI void GENESISCC gePixelFormat_PutPixel(gePixelFormat Format,uint8 **ppData,uint32 Pixel)
00080 {
00081 const gePixelFormat_Operations * ops;
00082 ops = &gePixelFormat_Operations_Array[Format];
00083 assert(ops);
00084 assert(ops->PutPixel);
00085 ops->PutPixel(ppData,Pixel);
00086 }
00087
00088 GENESISAPI void GENESISCC gePixelFormat_GetColor(gePixelFormat Format,uint8 **ppData,int *R,int *G,int *B,int *A)
00089 {
00090 const gePixelFormat_Operations * ops;
00091 ops = &gePixelFormat_Operations_Array[Format];
00092 assert(ops);
00093 assert(ops->GetColor);
00094 ops->GetColor(ppData,R,G,B,A);
00095 }
00096 GENESISAPI void GENESISCC gePixelFormat_PutColor(gePixelFormat Format,uint8 **ppData,int R,int G,int B,int A)
00097 {
00098 const gePixelFormat_Operations * ops;
00099 ops = &gePixelFormat_Operations_Array[Format];
00100 assert(ops);
00101 assert(ops->PutColor);
00102 ops->PutColor(ppData,R,G,B,A);
00103 }
00104
00105
00106
00107 GENESISAPI uint32 GENESISCC gePixelFormat_ConvertPixel(gePixelFormat Format,uint32 Pixel,gePixelFormat ToFormat)
00108 {
00109 int R,G,B,A;
00110 gePixelFormat_DecomposePixel(Format,Pixel,&R,&G,&B,&A);
00111 return gePixelFormat_ComposePixel(ToFormat,R,G,B,A);
00112 }
00113
00114 GENESISAPI const gePixelFormat_Operations * GENESISCC gePixelFormat_GetOperations( gePixelFormat Format )
00115 {
00116 if ( ! gePixelFormat_IsValid(Format) )
00117 return NULL;
00118 else
00119 return & gePixelFormat_Operations_Array[Format];
00120 }
00121
00122
00123
00124 GENESISAPI unsigned int GENESISCC gePixelFormat_BytesPerPel( gePixelFormat Format )
00125 {
00126 assert( gePixelFormat_IsValid(Format) );
00127 return gePixelFormat_Operations_Array[Format].BytesPerPel;
00128 }
00129
00130 GENESISAPI geBoolean GENESISCC gePixelFormat_HasPalette( gePixelFormat Format )
00131 {
00132 assert( gePixelFormat_IsValid(Format) );
00133 return gePixelFormat_Operations_Array[Format].HasPalette;
00134 }
00135
00136 GENESISAPI geBoolean GENESISCC gePixelFormat_HasAlpha( gePixelFormat Format )
00137 {
00138 assert( gePixelFormat_IsValid(Format) );
00139
00140
00141 return gePixelFormat_Operations_Array[Format].AMask;
00142 }
00143
00144 static int NumBitsOn(uint32 val)
00145 {
00146 uint32 count = 0;
00147 while(val)
00148 {
00149 count += val&1;
00150 val >>= 1;
00151 }
00152 return count;
00153 }
00154
00155 GENESISAPI geBoolean GENESISCC gePixelFormat_HasGoodAlpha( gePixelFormat Format )
00156 {
00157 assert( gePixelFormat_IsValid(Format) );
00158
00159 if ( NumBitsOn(gePixelFormat_Operations_Array[Format].AMask) > 1 )
00160 return GE_TRUE;
00161 else
00162 return GE_FALSE;
00163 }
00164
00165 GENESISAPI geBoolean GENESISCC gePixelFormat_IsRaw( gePixelFormat Format )
00166 {
00167 assert( gePixelFormat_IsValid(Format) );
00168 if ( gePixelFormat_Operations_Array[Format].ComposePixel )
00169 return GE_TRUE;
00170 else
00171 return GE_FALSE;
00172 }
00173
00174 GENESISAPI const char * GENESISCC gePixelFormat_Description( gePixelFormat Format )
00175 {
00176 assert( gePixelFormat_IsValid(Format) );
00177 return gePixelFormat_Operations_Array[Format].Description;
00178 }
00179
00180 GENESISAPI geBoolean GENESISCC gePixelFormat_IsValid(gePixelFormat Format)
00181 {
00182 if ( (int)Format < 0 || (int)Format >= GE_PIXELFORMAT_COUNT )
00183 return GE_FALSE;
00184 return GE_TRUE;
00185 }
00186
00187
00188
00189
00190
00191 uint32 GetPixel_8bit(uint8 **ppData)
00192 {
00193 uint32 pel;
00194 pel = *((uint8 *)(*ppData));
00195 (*ppData) += 1;
00196 return pel;
00197 }
00198
00199 void PutPixel_8bit(uint8 **ppData,uint32 Pixel)
00200 {
00201 *((uint8 *)(*ppData)) = (uint8)Pixel;
00202 (*ppData) += 1;
00203 }
00204
00205 uint32 GetPixel_16bit(uint8 **ppData)
00206 {
00207 uint32 pel;
00208 pel = *((uint16 *)(*ppData));
00209 (*ppData) += 2;
00210 return pel;
00211 }
00212
00213 void PutPixel_16bit(uint8 **ppData,uint32 Pixel)
00214 {
00215 *((uint16 *)(*ppData)) = (uint16)Pixel;
00216 (*ppData) += 2;
00217 }
00218
00219 uint32 GetPixel_24bit(uint8 **ppData)
00220 {
00221 uint32 pel;
00222 pel = (*ppData)[0] <<16;
00223 pel += (*ppData)[1] << 8;
00224 pel += (*ppData)[2];
00225 (*ppData) += 3;
00226 return pel;
00227 }
00228
00229 void PutPixel_24bit(uint8 **ppData,uint32 Pixel)
00230 {
00231 (*ppData)[0] = (uint8)(Pixel>>16);
00232 (*ppData)[1] = (uint8)(Pixel>>8);
00233 (*ppData)[2] = (uint8)(Pixel);
00234 (*ppData) += 3;
00235 }
00236
00237 uint32 GetPixel_32bit(uint8 **ppData)
00238 {
00239 uint32 pel;
00240 pel = *((uint32 *)(*ppData));
00241 (*ppData) += 4;
00242 return pel;
00243 }
00244
00245 void PutPixel_32bit(uint8 **ppData,uint32 Pixel)
00246 {
00247 *((uint32 *)(*ppData)) = (uint32)Pixel;
00248 (*ppData) += 4;
00249 }
00250
00251
00252
00253
00254 #define RGB_to_Gray(R,G,B) max(max(R,G),B)
00255
00256 uint32 Compose_8bitGray (int R,int G,int B,int A)
00257 {
00258 return (uint32)RGB_to_Gray(R,G,B);
00259 }
00260
00261 void Decompose_8bitGray (uint32 Pixel,int *R,int *G,int *B,int *A)
00262 {
00263 *R = *G = *B = (int)Pixel;
00264 *A = 255;
00265 }
00266
00267 void Get_8bitGray(uint8 **ppData,int *R,int *G,int *B,int *A)
00268 {
00269 int V;
00270 V = **ppData;
00271 (*ppData) += 1;
00272 *R = *G = *B = V; *A = 255;
00273 }
00274
00275 void Put_8bitGray(uint8 **ppData,int R,int G,int B,int A)
00276 {
00277 int V;
00278 V = RGB_to_Gray(R,G,B);
00279 **ppData = V;
00280 (*ppData) += 1;
00281 }
00282
00283
00284
00285 uint32 Compose_nada (int R,int G,int B,int A)
00286 {
00287 return 0;
00288 }
00289
00290 void Decompose_nada (uint32 Pixel,int *R,int *G,int *B,int *A)
00291 {
00292 }
00293
00294 void Get_nada(uint8 **ppData,int *R,int *G,int *B,int *A)
00295 {
00296 }
00297
00298 void Put_nada(uint8 **ppData,int R,int G,int B,int A)
00299 {
00300 }
00301
00302
00303
00304 uint32 Compose_555rgb (int R,int G,int B,int A)
00305 {
00306 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00307 return ( ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) );
00308 }
00309
00310 void Decompose_555rgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00311 {
00312 *R = ((Pixel & 0x7C00)>>7) + 4;
00313 *G = ((Pixel & 0x03E0)>>2) + 4;
00314 *B = ((Pixel & 0x001F)<<3) + 4;
00315 *A = 255;
00316 }
00317
00318 void Get_555rgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00319 {
00320 uint16 Pixel;
00321 Pixel = *((uint16 *)*ppData);
00322 (*ppData) += 2;
00323 *R = ((Pixel & 0x7C00)>>7) + 4;
00324 *G = ((Pixel & 0x03E0)>>2) + 4;
00325 *B = ((Pixel & 0x001F)<<3) + 4;
00326 *A = 255;
00327 }
00328
00329 void Put_555rgb(uint8 **ppData,int R,int G,int B,int A)
00330 {
00331 uint16 Pixel;
00332 Pixel = ( ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) );
00333 *((uint16 *)*ppData) = Pixel;
00334 (*ppData) += 2;
00335 }
00336
00337 uint32 Compose_555bgr (int R,int G,int B,int A)
00338 {
00339 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00340 return ( ((B>>3)<<10) + ((G>>3)<<5) + ((R>>3)) );
00341 }
00342
00343 void Decompose_555bgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00344 {
00345 *B = ((Pixel & 0x7C00)>>7) + 4;
00346 *G = ((Pixel & 0x03E0)>>2) + 4;
00347 *R = ((Pixel & 0x001F)<<3) + 4;
00348 *A = 255;
00349 }
00350
00351 void Get_555bgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00352 {
00353 uint16 Pixel;
00354 Pixel = *((uint16 *)*ppData);
00355 (*ppData) += 2;
00356 *B = ((Pixel & 0x7C00)>>7) + 4;
00357 *G = ((Pixel & 0x03E0)>>2) + 4;
00358 *R = ((Pixel & 0x001F)<<3) + 4;
00359 *A = 255;
00360 }
00361
00362 void Put_555bgr(uint8 **ppData,int R,int G,int B,int A)
00363 {
00364 uint16 Pixel;
00365 Pixel = ( ((B>>3)<<10) + ((G>>3)<<5) + ((R>>3)) );
00366 *((uint16 *)*ppData) = Pixel;
00367 (*ppData) += 2;
00368 }
00369
00370
00371
00372
00373 uint32 Compose_565rgb (int R,int G,int B,int A)
00374 {
00375 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00376 return ( ((R>>3)<<11) + ((G>>2)<<5) + ((B>>3)) );
00377 }
00378
00379 void Decompose_565rgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00380 {
00381 *R = ((Pixel & 0xF800)>>8) + 4;
00382 *G = ((Pixel & 0x07E0)>>3) + 2;
00383 *B = ((Pixel & 0x001F)<<3) + 4;
00384 *A = 255;
00385 }
00386
00387 void Get_565rgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00388 {
00389 uint16 Pixel;
00390 Pixel = *((uint16 *)*ppData);
00391 (*ppData) += 2;
00392 *R = ((Pixel & 0xF800)>>8) + 4;
00393 *G = ((Pixel & 0x07E0)>>3) + 2;
00394 *B = ((Pixel & 0x001F)<<3) + 4;
00395 *A = 255;
00396 }
00397
00398 void Put_565rgb(uint8 **ppData,int R,int G,int B,int A)
00399 {
00400 uint16 Pixel;
00401 Pixel = ( ((R>>3)<<11) + ((G>>2)<<5) + ((B>>3)) );
00402 *((uint16 *)*ppData) = Pixel;
00403 (*ppData) += 2;
00404 }
00405
00406 uint32 Compose_565bgr (int R,int G,int B,int A)
00407 {
00408 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00409 return ( ((B>>3)<<11) + ((G>>2)<<5) + ((R>>3)) );
00410 }
00411
00412 void Decompose_565bgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00413 {
00414 *B = ((Pixel & 0xF800)>>8) + 4;
00415 *G = ((Pixel & 0x07E0)>>3) + 2;
00416 *R = ((Pixel & 0x001F)<<3) + 4;
00417 *A = 255;
00418 }
00419
00420 void Get_565bgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00421 {
00422 uint16 Pixel;
00423 Pixel = *((uint16 *)*ppData);
00424 (*ppData) += 2;
00425 *B = ((Pixel & 0xF800)>>8) + 4;
00426 *G = ((Pixel & 0x07E0)>>3) + 2;
00427 *R = ((Pixel & 0x001F)<<3) + 4;
00428 *A = 255;
00429 }
00430
00431 void Put_565bgr(uint8 **ppData,int R,int G,int B,int A)
00432 {
00433 uint16 Pixel;
00434 Pixel = ( ((B>>3)<<11) + ((G>>2)<<5) + ((R>>3)) );
00435 *((uint16 *)*ppData) = Pixel;
00436 (*ppData) += 2;
00437 }
00438
00439
00440
00441 uint32 Compose_4444 (int R,int G,int B,int A)
00442 {
00443 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00444 return ((A>>4)<<12) + ((R>>4)<<8) + ((G>>4)<<4) + (B>>4);
00445 }
00446
00447 void Decompose_4444 (uint32 Pixel,int *R,int *G,int *B,int *A)
00448 {
00449 *A = ((Pixel & 0xF000)>>8);
00450 *R = ((Pixel & 0x0F00)>>4) + 8;
00451 *G = ((Pixel & 0x00F0) ) + 8;
00452 *B = ((Pixel & 0x000F)<<4) + 8;
00453 }
00454
00455 void Get_4444(uint8 **ppData,int *R,int *G,int *B,int *A)
00456 {
00457 uint16 Pixel;
00458 Pixel = *((uint16 *)*ppData);
00459 (*ppData) += 2;
00460 *A = ((Pixel & 0xF000)>>8);
00461 *R = ((Pixel & 0x0F00)>>4) + 8;
00462 *G = ((Pixel & 0x00F0) ) + 8;
00463 *B = ((Pixel & 0x000F)<<4) + 8;
00464 }
00465
00466 void Put_4444(uint8 **ppData,int R,int G,int B,int A)
00467 {
00468 uint16 Pixel;
00469 Pixel = ((A>>4)<<12) + ((R>>4)<<8) + ((G>>4)<<4) + (B>>4);
00470 *((uint16 *)*ppData) = Pixel;
00471 (*ppData) += 2;
00472 }
00473
00474 uint32 Compose_1555 (int R,int G,int B,int A)
00475 {
00476 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00477 return ((A>>7)<<15) + ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) ;
00478 }
00479
00480 void Decompose_1555 (uint32 Pixel,int *R,int *G,int *B,int *A)
00481 {
00482 *R = ((Pixel & 0x7C00)>>7) + 4;
00483 *G = ((Pixel & 0x03E0)>>2) + 4;
00484 *B = ((Pixel & 0x001F)<<3) + 4;
00485 *A = (Pixel>>15)<<7;
00486 }
00487
00488 void Get_1555(uint8 **ppData,int *R,int *G,int *B,int *A)
00489 {
00490 uint16 Pixel;
00491 Pixel = *((uint16 *)*ppData);
00492 (*ppData) += 2;
00493 *R = ((Pixel & 0x7C00)>>7) + 4;
00494 *G = ((Pixel & 0x03E0)>>2) + 4;
00495 *B = ((Pixel & 0x001F)<<3) + 4;
00496 *A = (Pixel>>15)<<7;
00497 }
00498
00499 void Put_1555(uint8 **ppData,int R,int G,int B,int A)
00500 {
00501 uint16 Pixel;
00502 Pixel = ((A>>7)<<15) + ( ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) );
00503 *((uint16 *)*ppData) = Pixel;
00504 (*ppData) += 2;
00505 }
00506
00507
00508
00509
00510 uint32 Compose_24rgb (int R,int G,int B,int A)
00511 {
00512 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00513 return (R<<16) + (G<<8) + B;
00514 }
00515
00516 void Decompose_24rgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00517 {
00518 *A = 255;
00519 *R = (Pixel>>16)&0xFF;
00520 *G = (Pixel>>8)&0xFF;
00521 *B = (Pixel)&0xFF;
00522 }
00523
00524 void Get_24rgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00525 {
00526 uint8 * ptr = *ppData;
00527 *R = ptr[0];
00528 *G = ptr[1];
00529 *B = ptr[2];
00530 *A = 255;
00531 *ppData = ptr + 3;
00532 }
00533
00534 void Put_24rgb(uint8 **ppData,int R,int G,int B,int A)
00535 {
00536 uint8 * ptr = *ppData;
00537 ptr[0] = R;
00538 ptr[1] = G;
00539 ptr[2] = B;
00540 *ppData = ptr + 3;
00541 }
00542
00543 uint32 Compose_24bgr (int R,int G,int B,int A)
00544 {
00545 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00546 return (B<<16) + (G<<8) + R;
00547 }
00548
00549 void Decompose_24bgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00550 {
00551 *A = 255;
00552 *B = (Pixel>>16)&0xFF;
00553 *G = (Pixel>>8)&0xFF;
00554 *R = (Pixel)&0xFF;
00555 }
00556
00557 void Get_24bgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00558 {
00559 uint8 * ptr = *ppData;
00560 *B = ptr[0];
00561 *G = ptr[1];
00562 *R = ptr[2];
00563 *A = 255;
00564 *ppData = ptr + 3;
00565 }
00566
00567 void Put_24bgr(uint8 **ppData,int R,int G,int B,int A)
00568 {
00569 uint8 * ptr = *ppData;
00570 ptr[0] = B;
00571 ptr[1] = G;
00572 ptr[2] = R;
00573 *ppData = ptr + 3;
00574 }
00575
00576
00577
00578
00579
00580 uint32 Compose_32rgbx (int R,int G,int B,int A)
00581 {
00582 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00583 return (R<<24) + (G<<16) + (B<<8);
00584 }
00585
00586 void Decompose_32rgbx (uint32 Pixel,int *R,int *G,int *B,int *A)
00587 {
00588 *A = 255;
00589 *R = (Pixel>>24)&0xFF;
00590 *G = (Pixel>>16)&0xFF;
00591 *B = (Pixel>> 8)&0xFF;
00592 }
00593
00594 void Get_32rgbx(uint8 **ppData,int *R,int *G,int *B,int *A)
00595 {
00596 (*ppData) += 1;
00597 *B = **ppData; (*ppData) += 1;
00598 *G = **ppData; (*ppData) += 1;
00599 *R = **ppData; (*ppData) += 1;
00600 *A = 255;
00601 }
00602
00603 void Put_32rgbx(uint8 **ppData,int R,int G,int B,int A)
00604 {
00605 (*ppData) += 1;
00606 **ppData = B; (*ppData) += 1;
00607 **ppData = G; (*ppData) += 1;
00608 **ppData = R; (*ppData) += 1;
00609 }
00610
00611 uint32 Compose_32xrgb (int R,int G,int B,int A)
00612 {
00613 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00614 return (R<<16) + (G<<8) + (B);
00615 }
00616
00617 void Decompose_32xrgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00618 {
00619 *A = 255;
00620 *R = (Pixel>>16)&0xFF;
00621 *G = (Pixel>> 8)&0xFF;
00622 *B = (Pixel )&0xFF;
00623 }
00624
00625 void Get_32xrgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00626 {
00627 *B = **ppData; (*ppData) += 1;
00628 *G = **ppData; (*ppData) += 1;
00629 *R = **ppData; (*ppData) += 1;
00630 (*ppData) += 1;
00631 *A = 255;
00632 }
00633
00634 void Put_32xrgb(uint8 **ppData,int R,int G,int B,int A)
00635 {
00636 **ppData = B; (*ppData) += 1;
00637 **ppData = G; (*ppData) += 1;
00638 **ppData = R; (*ppData) += 1;
00639 (*ppData) += 1;
00640 }
00641
00642 uint32 Compose_32bgrx (int R,int G,int B,int A)
00643 {
00644 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00645 return (B<<24) + (G<<16) + (R<<8);
00646 }
00647
00648 void Decompose_32bgrx (uint32 Pixel,int *R,int *G,int *B,int *A)
00649 {
00650 *A = 255;
00651 *B = (Pixel>>24)&0xFF;
00652 *G = (Pixel>>16)&0xFF;
00653 *R = (Pixel>> 8)&0xFF;
00654 }
00655
00656 void Get_32bgrx(uint8 **ppData,int *R,int *G,int *B,int *A)
00657 {
00658 (*ppData) += 1;
00659 *R = **ppData; (*ppData) += 1;
00660 *G = **ppData; (*ppData) += 1;
00661 *B = **ppData; (*ppData) += 1;
00662 *A = 255;
00663 }
00664
00665 void Put_32bgrx(uint8 **ppData,int R,int G,int B,int A)
00666 {
00667 (*ppData) += 1;
00668 **ppData = R; (*ppData) += 1;
00669 **ppData = G; (*ppData) += 1;
00670 **ppData = B; (*ppData) += 1;
00671 }
00672
00673 uint32 Compose_32xbgr (int R,int G,int B,int A)
00674 {
00675 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00676 return (B<<16) + (G<<8) + (R);
00677 }
00678
00679 void Decompose_32xbgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00680 {
00681 *A = 255;
00682 *B = (Pixel>>16)&0xFF;
00683 *G = (Pixel>> 8)&0xFF;
00684 *R = (Pixel )&0xFF;
00685 }
00686
00687 void Get_32xbgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00688 {
00689 *R = **ppData; (*ppData) += 1;
00690 *G = **ppData; (*ppData) += 1;
00691 *B = **ppData; (*ppData) += 1;
00692 (*ppData) += 1;
00693 *A = 255;
00694 }
00695
00696 void Put_32xbgr(uint8 **ppData,int R,int G,int B,int A)
00697 {
00698 **ppData = R; (*ppData) += 1;
00699 **ppData = G; (*ppData) += 1;
00700 **ppData = B; (*ppData) += 1;
00701 (*ppData) += 1;
00702 }
00703
00704
00705
00706 uint32 Compose_32rgba (int R,int G,int B,int A)
00707 {
00708 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00709 return (R<<24) + (G<<16) + (B<<8) + A;
00710 }
00711
00712 void Decompose_32rgba (uint32 pixel,int *R,int *G,int *B,int *A)
00713 {
00714 *R = (pixel>>24)&0xFF;
00715 *G = (pixel>>16)&0xFF;
00716 *B = (pixel>> 8)&0xFF;
00717 *A = (pixel )&0xFF;
00718 }
00719
00720 void Get_32rgba(uint8 **ppData,int *R,int *G,int *B,int *A)
00721 {
00722 *A = **ppData; (*ppData) += 1;
00723 *B = **ppData; (*ppData) += 1;
00724 *G = **ppData; (*ppData) += 1;
00725 *R = **ppData; (*ppData) += 1;
00726 }
00727
00728 void Put_32rgba(uint8 **ppData,int R,int G,int B,int A)
00729 {
00730 **ppData = A; (*ppData) += 1;
00731 **ppData = B; (*ppData) += 1;
00732 **ppData = G; (*ppData) += 1;
00733 **ppData = R; (*ppData) += 1;
00734 }
00735
00736 uint32 Compose_32argb (int R,int G,int B,int A)
00737 {
00738 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00739 return (A<<24) + (R<<16) + (G<<8) + (B);
00740 }
00741
00742 void Decompose_32argb (uint32 pixel,int *R,int *G,int *B,int *A)
00743 {
00744 *A = (pixel>>24)&0xFF;
00745 *R = (pixel>>16)&0xFF;
00746 *G = (pixel>> 8)&0xFF;
00747 *B = (pixel )&0xFF;
00748 }
00749
00750 void Get_32argb(uint8 **ppData,int *R,int *G,int *B,int *A)
00751 {
00752 *B = **ppData; (*ppData) += 1;
00753 *G = **ppData; (*ppData) += 1;
00754 *R = **ppData; (*ppData) += 1;
00755 *A = **ppData; (*ppData) += 1;
00756 }
00757
00758 void Put_32argb(uint8 **ppData,int R,int G,int B,int A)
00759 {
00760 **ppData = B; (*ppData) += 1;
00761 **ppData = G; (*ppData) += 1;
00762 **ppData = R; (*ppData) += 1;
00763 **ppData = A; (*ppData) += 1;
00764 }
00765
00766 uint32 Compose_32bgra (int R,int G,int B,int A)
00767 {
00768 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00769 return (B<<24) + (G<<16) + (R<<8) + A;
00770 }
00771
00772 void Decompose_32bgra (uint32 pixel,int *R,int *G,int *B,int *A)
00773 {
00774 *B = (pixel>>24)&0xFF;
00775 *G = (pixel>>16)&0xFF;
00776 *R = (pixel>> 8)&0xFF;
00777 *A = (pixel )&0xFF;
00778 }
00779
00780 void Get_32bgra(uint8 **ppData,int *R,int *G,int *B,int *A)
00781 {
00782 *A = **ppData; (*ppData) += 1;
00783 *R = **ppData; (*ppData) += 1;
00784 *G = **ppData; (*ppData) += 1;
00785 *B = **ppData; (*ppData) += 1;
00786 }
00787
00788 void Put_32bgra(uint8 **ppData,int R,int G,int B,int A)
00789 {
00790 **ppData = A; (*ppData) += 1;
00791 **ppData = R; (*ppData) += 1;
00792 **ppData = G; (*ppData) += 1;
00793 **ppData = B; (*ppData) += 1;
00794 }
00795
00796 uint32 Compose_32abgr (int R,int G,int B,int A)
00797 {
00798 assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00799 return (A<<24) + (B<<16) + (G<<8) + (R);
00800 }
00801
00802 void Decompose_32abgr (uint32 pixel,int *R,int *G,int *B,int *A)
00803 {
00804 *A = (pixel>>24)&0xFF;
00805 *B = (pixel>>16)&0xFF;
00806 *G = (pixel>> 8)&0xFF;
00807 *R = (pixel )&0xFF;
00808 }
00809
00810 void Get_32abgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00811 {
00812 *R = **ppData; (*ppData) += 1;
00813 *G = **ppData; (*ppData) += 1;
00814 *B = **ppData; (*ppData) += 1;
00815 *A = **ppData; (*ppData) += 1;
00816 }
00817
00818 void Put_32abgr(uint8 **ppData,int R,int G,int B,int A)
00819 {
00820 **ppData = R; (*ppData) += 1;
00821 **ppData = G; (*ppData) += 1;
00822 **ppData = B; (*ppData) += 1;
00823 **ppData = A; (*ppData) += 1;
00824 }
00825
00826
00827
00828
00829 static const gePixelFormat_Operations gePixelFormat_Operations_Array_Def[] =
00830 {
00831 {0,0,0,0, 0,0,0,0, 0,0,0,0, 0 ,0, "invalid"},
00832
00833 {0,0,0,0, 0,0,0,0, 0,0,0,0, 1 ,1, "8bit pal", NULL,NULL, NULL,NULL, GetPixel_8bit, PutPixel_8bit},
00834
00835 {0x3F,0x7F,0x3F,0, -2,-1,-2,0, 3,0,3,0xFF, 1 ,0, "8bit gray", Compose_8bitGray,Decompose_8bitGray, Get_8bitGray,Put_8bitGray, GetPixel_8bit, PutPixel_8bit},
00836
00837
00838 {0x7C00 ,0x03E0 ,0x001F ,0, 7, 2, -3, 0, 4,4,4,0xFF, 2,0, "555 RGB", Compose_555rgb,Decompose_555rgb, Get_555rgb,Put_555rgb, GetPixel_16bit,PutPixel_16bit},
00839 {0x001F ,0x03E0 ,0x7C00 ,0, -3, 2, 7, 0, 4,4,4,0xFF, 2,0, "555 BGR", Compose_555bgr,Decompose_555bgr, Get_555bgr,Put_555bgr, GetPixel_16bit,PutPixel_16bit},
00840 {0xF800 ,0x07E0 ,0x001F ,0, 8, 3, -3, 0, 4,2,4,0xFF, 2,0, "565 RGB", Compose_565rgb,Decompose_565rgb, Get_565rgb,Put_565rgb, GetPixel_16bit,PutPixel_16bit},
00841 {0x001F ,0x07E0 ,0xF800 ,0, -3, 3, 8, 0, 4,2,4,0xFF, 2,0, "565 BGR", Compose_565bgr,Decompose_565bgr, Get_565bgr,Put_565bgr, GetPixel_16bit,PutPixel_16bit},
00842 {0x0F00 ,0x00F0 ,0x000F ,0xF000, 4, 0, -4, 8, 8,8,8,8, 2,0, "4444 ARGB", Compose_4444,Decompose_4444, Get_4444,Put_4444, GetPixel_16bit,PutPixel_16bit},
00843 {0x7C00 ,0x03E0 ,0x001F ,0x8000, 7, 2, -3, 8, 4,4,4,0x40, 2,0, "1555 ARGB", Compose_1555,Decompose_1555, Get_1555,Put_1555, GetPixel_16bit,PutPixel_16bit},
00844
00845
00846 {0x00FF0000,0x0000FF00,0x000000FF,0, 16, 8, 0,0, 0,0,0,0xFF, 3,0, "24bit RGB", Compose_24rgb,Decompose_24rgb, Get_24rgb,Put_24rgb, GetPixel_24bit,PutPixel_24bit},
00847 {0x000000FF,0x0000FF00,0x00FF0000,0, 0 , 8,16,0, 0,0,0,0xFF, 3,0, "24bit BGR", Compose_24bgr,Decompose_24bgr, Get_24bgr,Put_24bgr, GetPixel_24bit,PutPixel_24bit},
00848 {0x00FF0000,0x0000FF00,0x000000FF,0, 16, 8, 0,0, 0,0,0,0xFF, 3,0, "24bit YUV", Compose_24rgb,Decompose_24rgb, Get_24rgb,Put_24rgb, GetPixel_24bit,PutPixel_24bit},
00849
00850
00851 {0xFF000000,0x00FF0000,0x0000FF00,0, 24,16, 8,0, 0,0,0,0xFF, 4,0, "32 bit RGBX", Compose_32rgbx,Decompose_32rgbx, Get_32rgbx,Put_32rgbx, GetPixel_32bit,PutPixel_32bit},
00852 {0x00FF0000,0x0000FF00,0x000000FF,0, 16, 8, 0,0, 0,0,0,0xFF, 4,0, "32 bit XRGB", Compose_32xrgb,Decompose_32xrgb, Get_32xrgb,Put_32xrgb, GetPixel_32bit,PutPixel_32bit},
00853 {0x0000FF00,0x00FF0000,0xFF000000,0, 8 ,16,24,0, 0,0,0,0xFF, 4,0, "32 bit BGRX", Compose_32bgrx,Decompose_32bgrx, Get_32bgrx,Put_32bgrx, GetPixel_32bit,PutPixel_32bit},
00854 {0x000000FF,0x0000FF00,0x00FF0000,0, 0 , 8,16,0, 0,0,0,0xFF, 4,0, "32 bit XBGR", Compose_32xbgr,Decompose_32xbgr, Get_32xbgr,Put_32xbgr, GetPixel_32bit,PutPixel_32bit},
00855
00856 {0xFF000000,0x00FF0000,0x0000FF00,0x000000FF, 24,16, 8, 0, 0,0,0,0,4,0,"32 bit RGBA", Compose_32rgba,Decompose_32rgba, Get_32rgba,Put_32rgba, GetPixel_32bit,PutPixel_32bit},
00857 {0x00FF0000,0x0000FF00,0x000000FF,0xFF000000, 16, 8, 0,24, 0,0,0,0,4,0,"32 bit ARGB", Compose_32argb,Decompose_32argb, Get_32argb,Put_32argb, GetPixel_32bit,PutPixel_32bit},
00858 {0x0000FF00,0x00FF0000,0xFF000000,0x000000FF, 8 ,16,24, 0, 0,0,0,0,4,0,"32 bit BGRA", Compose_32bgra,Decompose_32bgra, Get_32bgra,Put_32bgra, GetPixel_32bit,PutPixel_32bit},
00859 {0x000000FF,0x0000FF00,0x00FF0000,0xFF000000, 0 , 8,16,24, 0,0,0,0,4,0,"32 bit ABGR", Compose_32abgr,Decompose_32abgr, Get_32abgr,Put_32abgr, GetPixel_32bit,PutPixel_32bit},
00860
00861 {0,0,0,0, 0,0,0,0, 0,0,0,0, 0 ,0, "wavelet"},
00862
00863 {0,0,0,0, 0,0,0,0, 0,0,0,0, 0 ,0, "invalid"}
00864 };
00865
00866 const gePixelFormat_Operations * gePixelFormat_Operations_Array = gePixelFormat_Operations_Array_Def;
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890