9#ifndef GP_PIXEL_CHANNEL_GEN_H
10#define GP_PIXEL_CHANNEL_GEN_H
34#define GP_PIXEL_GET_R_RGB101010(p) (GP_GET_BITS(20, 10, (p)))
35#define GP_PIXEL_GET_G_RGB101010(p) (GP_GET_BITS(10, 10, (p)))
36#define GP_PIXEL_GET_B_RGB101010(p) (GP_GET_BITS(0, 10, (p)))
42#define GP_PIXEL_CREATE_RGB101010(R, G, B) (0\
54#define GP_PIXEL_GET_R_xRGB8888(p) (GP_GET_BITS(16, 8, (p)))
55#define GP_PIXEL_GET_G_xRGB8888(p) (GP_GET_BITS(8, 8, (p)))
56#define GP_PIXEL_GET_B_xRGB8888(p) (GP_GET_BITS(0, 8, (p)))
62#define GP_PIXEL_CREATE_xRGB8888(R, G, B) (0\
74#define GP_PIXEL_GET_R_RGBA8888(p) (GP_GET_BITS(24, 8, (p)))
75#define GP_PIXEL_GET_G_RGBA8888(p) (GP_GET_BITS(16, 8, (p)))
76#define GP_PIXEL_GET_B_RGBA8888(p) (GP_GET_BITS(8, 8, (p)))
77#define GP_PIXEL_GET_A_RGBA8888(p) (GP_GET_BITS(0, 8, (p)))
83#define GP_PIXEL_CREATE_RGBA8888(R, G, B, A) (0\
96#define GP_PIXEL_GET_R_RGB888(p) (GP_GET_BITS(16, 8, (p)))
97#define GP_PIXEL_GET_G_RGB888(p) (GP_GET_BITS(8, 8, (p)))
98#define GP_PIXEL_GET_B_RGB888(p) (GP_GET_BITS(0, 8, (p)))
104#define GP_PIXEL_CREATE_RGB888(R, G, B) (0\
116#define GP_PIXEL_GET_B_BGR888(p) (GP_GET_BITS(16, 8, (p)))
117#define GP_PIXEL_GET_G_BGR888(p) (GP_GET_BITS(8, 8, (p)))
118#define GP_PIXEL_GET_R_BGR888(p) (GP_GET_BITS(0, 8, (p)))
124#define GP_PIXEL_CREATE_BGR888(B, G, R) (0\
136#define GP_PIXEL_GET_R_RGB555(p) (GP_GET_BITS(10, 5, (p)))
137#define GP_PIXEL_GET_G_RGB555(p) (GP_GET_BITS(5, 5, (p)))
138#define GP_PIXEL_GET_B_RGB555(p) (GP_GET_BITS(0, 5, (p)))
144#define GP_PIXEL_CREATE_RGB555(R, G, B) (0\
156#define GP_PIXEL_GET_R_RGB565(p) (GP_GET_BITS(11, 5, (p)))
157#define GP_PIXEL_GET_G_RGB565(p) (GP_GET_BITS(5, 6, (p)))
158#define GP_PIXEL_GET_B_RGB565(p) (GP_GET_BITS(0, 5, (p)))
164#define GP_PIXEL_CREATE_RGB565(R, G, B) (0\
176#define GP_PIXEL_GET_R_RGB666(p) (GP_GET_BITS(12, 6, (p)))
177#define GP_PIXEL_GET_G_RGB666(p) (GP_GET_BITS(6, 6, (p)))
178#define GP_PIXEL_GET_B_RGB666(p) (GP_GET_BITS(0, 6, (p)))
184#define GP_PIXEL_CREATE_RGB666(R, G, B) (0\
196#define GP_PIXEL_GET_R_RGB332(p) (GP_GET_BITS(5, 3, (p)))
197#define GP_PIXEL_GET_G_RGB332(p) (GP_GET_BITS(2, 3, (p)))
198#define GP_PIXEL_GET_B_RGB332(p) (GP_GET_BITS(0, 2, (p)))
204#define GP_PIXEL_CREATE_RGB332(R, G, B) (0\
216#define GP_PIXEL_GET_K_CMYK8888(p) (GP_GET_BITS(24, 8, (p)))
217#define GP_PIXEL_GET_Y_CMYK8888(p) (GP_GET_BITS(16, 8, (p)))
218#define GP_PIXEL_GET_M_CMYK8888(p) (GP_GET_BITS(8, 8, (p)))
219#define GP_PIXEL_GET_C_CMYK8888(p) (GP_GET_BITS(0, 8, (p)))
225#define GP_PIXEL_CREATE_CMYK8888(K, Y, M, C) (0\
238#define GP_PIXEL_GET_P_P2(p) (GP_GET_BITS(0, 2, (p)))
244#define GP_PIXEL_CREATE_P2(P) (0\
254#define GP_PIXEL_GET_P_P4(p) (GP_GET_BITS(0, 4, (p)))
260#define GP_PIXEL_CREATE_P4(P) (0\
270#define GP_PIXEL_GET_P_P8(p) (GP_GET_BITS(0, 8, (p)))
276#define GP_PIXEL_CREATE_P8(P) (0\
286#define GP_PIXEL_GET_V_G1_DB(p) (GP_GET_BITS(0, 1, (p)))
292#define GP_PIXEL_CREATE_G1_DB(V) (0\
302#define GP_PIXEL_GET_V_G2_DB(p) (GP_GET_BITS(0, 2, (p)))
308#define GP_PIXEL_CREATE_G2_DB(V) (0\
318#define GP_PIXEL_GET_V_G4_DB(p) (GP_GET_BITS(0, 4, (p)))
324#define GP_PIXEL_CREATE_G4_DB(V) (0\
334#define GP_PIXEL_GET_V_G1_UB(p) (GP_GET_BITS(0, 1, (p)))
340#define GP_PIXEL_CREATE_G1_UB(V) (0\
350#define GP_PIXEL_GET_V_G2_UB(p) (GP_GET_BITS(0, 2, (p)))
356#define GP_PIXEL_CREATE_G2_UB(V) (0\
366#define GP_PIXEL_GET_V_G4_UB(p) (GP_GET_BITS(0, 4, (p)))
372#define GP_PIXEL_CREATE_G4_UB(V) (0\
382#define GP_PIXEL_GET_V_G8(p) (GP_GET_BITS(0, 8, (p)))
388#define GP_PIXEL_CREATE_G8(V) (0\
398#define GP_PIXEL_GET_V_GA88(p) (GP_GET_BITS(0, 8, (p)))
399#define GP_PIXEL_GET_A_GA88(p) (GP_GET_BITS(8, 8, (p)))
405#define GP_PIXEL_CREATE_GA88(V, A) (0\
416#define GP_PIXEL_GET_V_G16(p) (GP_GET_BITS(0, 16, (p)))
422#define GP_PIXEL_CREATE_G16(V) (0\
429#define GP_PIXEL_CHANS_ADD_RGB101010(pixel, perc) \
430 GP_PIXEL_CREATE_RGB101010( \
431 GP_SAT_ADD(GP_PIXEL_GET_R_RGB101010(pixel), 0x3ff * perc / 100, 0x3ff), \
432 GP_SAT_ADD(GP_PIXEL_GET_G_RGB101010(pixel), 0x3ff * perc / 100, 0x3ff), \
433 GP_SAT_ADD(GP_PIXEL_GET_B_RGB101010(pixel), 0x3ff * perc / 100, 0x3ff) \
436#define GP_PIXEL_CHANS_ADD_xRGB8888(pixel, perc) \
437 GP_PIXEL_CREATE_xRGB8888( \
438 GP_SAT_ADD(GP_PIXEL_GET_R_xRGB8888(pixel), 0xff * perc / 100, 0xff), \
439 GP_SAT_ADD(GP_PIXEL_GET_G_xRGB8888(pixel), 0xff * perc / 100, 0xff), \
440 GP_SAT_ADD(GP_PIXEL_GET_B_xRGB8888(pixel), 0xff * perc / 100, 0xff) \
443#define GP_PIXEL_CHANS_ADD_RGBA8888(pixel, perc) \
444 GP_PIXEL_CREATE_RGBA8888( \
445 GP_SAT_ADD(GP_PIXEL_GET_R_RGBA8888(pixel), 0xff * perc / 100, 0xff), \
446 GP_SAT_ADD(GP_PIXEL_GET_G_RGBA8888(pixel), 0xff * perc / 100, 0xff), \
447 GP_SAT_ADD(GP_PIXEL_GET_B_RGBA8888(pixel), 0xff * perc / 100, 0xff), \
448 GP_PIXEL_GET_A_RGBA8888(pixel) \
451#define GP_PIXEL_CHANS_ADD_RGB888(pixel, perc) \
452 GP_PIXEL_CREATE_RGB888( \
453 GP_SAT_ADD(GP_PIXEL_GET_R_RGB888(pixel), 0xff * perc / 100, 0xff), \
454 GP_SAT_ADD(GP_PIXEL_GET_G_RGB888(pixel), 0xff * perc / 100, 0xff), \
455 GP_SAT_ADD(GP_PIXEL_GET_B_RGB888(pixel), 0xff * perc / 100, 0xff) \
458#define GP_PIXEL_CHANS_ADD_BGR888(pixel, perc) \
459 GP_PIXEL_CREATE_BGR888( \
460 GP_SAT_ADD(GP_PIXEL_GET_B_BGR888(pixel), 0xff * perc / 100, 0xff), \
461 GP_SAT_ADD(GP_PIXEL_GET_G_BGR888(pixel), 0xff * perc / 100, 0xff), \
462 GP_SAT_ADD(GP_PIXEL_GET_R_BGR888(pixel), 0xff * perc / 100, 0xff) \
465#define GP_PIXEL_CHANS_ADD_RGB555(pixel, perc) \
466 GP_PIXEL_CREATE_RGB555( \
467 GP_SAT_ADD(GP_PIXEL_GET_R_RGB555(pixel), 0x1f * perc / 100, 0x1f), \
468 GP_SAT_ADD(GP_PIXEL_GET_G_RGB555(pixel), 0x1f * perc / 100, 0x1f), \
469 GP_SAT_ADD(GP_PIXEL_GET_B_RGB555(pixel), 0x1f * perc / 100, 0x1f) \
472#define GP_PIXEL_CHANS_ADD_RGB565(pixel, perc) \
473 GP_PIXEL_CREATE_RGB565( \
474 GP_SAT_ADD(GP_PIXEL_GET_R_RGB565(pixel), 0x1f * perc / 100, 0x1f), \
475 GP_SAT_ADD(GP_PIXEL_GET_G_RGB565(pixel), 0x3f * perc / 100, 0x3f), \
476 GP_SAT_ADD(GP_PIXEL_GET_B_RGB565(pixel), 0x1f * perc / 100, 0x1f) \
479#define GP_PIXEL_CHANS_ADD_RGB666(pixel, perc) \
480 GP_PIXEL_CREATE_RGB666( \
481 GP_SAT_ADD(GP_PIXEL_GET_R_RGB666(pixel), 0x3f * perc / 100, 0x3f), \
482 GP_SAT_ADD(GP_PIXEL_GET_G_RGB666(pixel), 0x3f * perc / 100, 0x3f), \
483 GP_SAT_ADD(GP_PIXEL_GET_B_RGB666(pixel), 0x3f * perc / 100, 0x3f) \
486#define GP_PIXEL_CHANS_ADD_RGB332(pixel, perc) \
487 GP_PIXEL_CREATE_RGB332( \
488 GP_SAT_ADD(GP_PIXEL_GET_R_RGB332(pixel), 0x7 * perc / 100, 0x7), \
489 GP_SAT_ADD(GP_PIXEL_GET_G_RGB332(pixel), 0x7 * perc / 100, 0x7), \
490 GP_SAT_ADD(GP_PIXEL_GET_B_RGB332(pixel), 0x3 * perc / 100, 0x3) \
493#define GP_PIXEL_CHANS_ADD_CMYK8888(pixel, perc) \
494 GP_PIXEL_CREATE_CMYK8888( \
495 GP_SAT_ADD(GP_PIXEL_GET_K_CMYK8888(pixel), 0xff * perc / 100, 0xff), \
496 GP_SAT_ADD(GP_PIXEL_GET_Y_CMYK8888(pixel), 0xff * perc / 100, 0xff), \
497 GP_SAT_ADD(GP_PIXEL_GET_M_CMYK8888(pixel), 0xff * perc / 100, 0xff), \
498 GP_SAT_ADD(GP_PIXEL_GET_C_CMYK8888(pixel), 0xff * perc / 100, 0xff) \
501#define GP_PIXEL_CHANS_ADD_P2(pixel, perc) \
502 GP_PIXEL_CREATE_P2( \
503 GP_SAT_ADD(GP_PIXEL_GET_P_P2(pixel), 0x3 * perc / 100, 0x3) \
506#define GP_PIXEL_CHANS_ADD_P4(pixel, perc) \
507 GP_PIXEL_CREATE_P4( \
508 GP_SAT_ADD(GP_PIXEL_GET_P_P4(pixel), 0xf * perc / 100, 0xf) \
511#define GP_PIXEL_CHANS_ADD_P8(pixel, perc) \
512 GP_PIXEL_CREATE_P8( \
513 GP_SAT_ADD(GP_PIXEL_GET_P_P8(pixel), 0xff * perc / 100, 0xff) \
516#define GP_PIXEL_CHANS_ADD_G1_DB(pixel, perc) \
517 GP_PIXEL_CREATE_G1_DB( \
518 GP_SAT_ADD(GP_PIXEL_GET_V_G1_DB(pixel), 0x1 * perc / 100, 0x1) \
521#define GP_PIXEL_CHANS_ADD_G2_DB(pixel, perc) \
522 GP_PIXEL_CREATE_G2_DB( \
523 GP_SAT_ADD(GP_PIXEL_GET_V_G2_DB(pixel), 0x3 * perc / 100, 0x3) \
526#define GP_PIXEL_CHANS_ADD_G4_DB(pixel, perc) \
527 GP_PIXEL_CREATE_G4_DB( \
528 GP_SAT_ADD(GP_PIXEL_GET_V_G4_DB(pixel), 0xf * perc / 100, 0xf) \
531#define GP_PIXEL_CHANS_ADD_G1_UB(pixel, perc) \
532 GP_PIXEL_CREATE_G1_UB( \
533 GP_SAT_ADD(GP_PIXEL_GET_V_G1_UB(pixel), 0x1 * perc / 100, 0x1) \
536#define GP_PIXEL_CHANS_ADD_G2_UB(pixel, perc) \
537 GP_PIXEL_CREATE_G2_UB( \
538 GP_SAT_ADD(GP_PIXEL_GET_V_G2_UB(pixel), 0x3 * perc / 100, 0x3) \
541#define GP_PIXEL_CHANS_ADD_G4_UB(pixel, perc) \
542 GP_PIXEL_CREATE_G4_UB( \
543 GP_SAT_ADD(GP_PIXEL_GET_V_G4_UB(pixel), 0xf * perc / 100, 0xf) \
546#define GP_PIXEL_CHANS_ADD_G8(pixel, perc) \
547 GP_PIXEL_CREATE_G8( \
548 GP_SAT_ADD(GP_PIXEL_GET_V_G8(pixel), 0xff * perc / 100, 0xff) \
551#define GP_PIXEL_CHANS_ADD_GA88(pixel, perc) \
552 GP_PIXEL_CREATE_GA88( \
553 GP_SAT_ADD(GP_PIXEL_GET_V_GA88(pixel), 0xff * perc / 100, 0xff), \
554 GP_PIXEL_GET_A_GA88(pixel) \
557#define GP_PIXEL_CHANS_ADD_G16(pixel, perc) \
558 GP_PIXEL_CREATE_G16( \
559 GP_SAT_ADD(GP_PIXEL_GET_V_G16(pixel), 0xffff * perc / 100, 0xffff) \
Helper macros to get and set bytes.