GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_mix_pixels2.gen.h
1// SPDX-License-Identifier: GPL-2.1-or-later
2/*
3 * gp_mix_pixels2.gen.h
4 *
5 * GENERATED on 2024 04 14 13:01:17 from gp_mix_pixels2.gen.h.t
6 *
7 * DO NOT MODIFY THIS FILE DIRECTLY!
8 */
9#ifndef GP_MIX_PIXELS2_GEN_H
10#define GP_MIX_PIXELS2_GEN_H
11
12/*
13 * Macros to mix two pixels. The source must have alpha channel.
14 *
15 * Copyright (C) 2009-2014 Cyril Hrubis <metan@ucw.cz>
16 */
17
18#include <core/gp_pixel.h>
19
20//TODO: Fix blit where both source and destination have alpha channel
21
22
23static inline gp_pixel gp_mix_pixels_RGBA8888_RGB101010(gp_pixel src, gp_pixel dst)
24{
25 /* Extract the alpha channel */
26 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
27
28 /* Convert the pixel to RGB888, mix the values */
29 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
30
31 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
32 GP_PIXEL_RGB101010_TO_RGB888(dst, dst_rgb);
33
34 int sr, sg, sb;
35 int dr, dg, db;
36
37 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
38 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
39 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
40
41 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
42 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
43 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
44
45
46 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
47 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
48 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
49
50 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
51
52 GP_PIXEL_RGB888_TO_RGB101010(dst_rgb, res);
53
54 return res;
55}
56
57
58static inline gp_pixel gp_mix_pixels_RGBA8888_xRGB8888(gp_pixel src, gp_pixel dst)
59{
60 /* Extract the alpha channel */
61 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
62
63 /* Convert the pixel to RGB888, mix the values */
64 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
65
66 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
67 GP_PIXEL_xRGB8888_TO_RGB888(dst, dst_rgb);
68
69 int sr, sg, sb;
70 int dr, dg, db;
71
72 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
73 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
74 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
75
76 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
77 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
78 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
79
80
81 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
82 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
83 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
84
85 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
86
87 GP_PIXEL_RGB888_TO_xRGB8888(dst_rgb, res);
88
89 return res;
90}
91
92
93static inline gp_pixel gp_mix_pixels_RGBA8888_RGBA8888(gp_pixel src, gp_pixel dst)
94{
95 /* Extract the alpha channel */
96 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
97
98 /* Convert the pixel to RGB888, mix the values */
99 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
100
101 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
102 GP_PIXEL_RGBA8888_TO_RGB888(dst, dst_rgb);
103
104 int sr, sg, sb;
105 int dr, dg, db;
106
107 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
108 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
109 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
110
111 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
112 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
113 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
114
115
116 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
117 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
118 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
119
120 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
121
122 GP_PIXEL_RGB888_TO_RGBA8888(dst_rgb, res);
123
124 return res;
125}
126
127
128static inline gp_pixel gp_mix_pixels_RGBA8888_RGB888(gp_pixel src, gp_pixel dst)
129{
130 /* Extract the alpha channel */
131 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
132
133 /* Convert the pixel to RGB888, mix the values */
134 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
135
136 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
137 GP_PIXEL_RGB888_TO_RGB888(dst, dst_rgb);
138
139 int sr, sg, sb;
140 int dr, dg, db;
141
142 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
143 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
144 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
145
146 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
147 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
148 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
149
150
151 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
152 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
153 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
154
155 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
156
157 GP_PIXEL_RGB888_TO_RGB888(dst_rgb, res);
158
159 return res;
160}
161
162
163static inline gp_pixel gp_mix_pixels_RGBA8888_BGR888(gp_pixel src, gp_pixel dst)
164{
165 /* Extract the alpha channel */
166 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
167
168 /* Convert the pixel to RGB888, mix the values */
169 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
170
171 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
172 GP_PIXEL_BGR888_TO_RGB888(dst, dst_rgb);
173
174 int sr, sg, sb;
175 int dr, dg, db;
176
177 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
178 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
179 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
180
181 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
182 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
183 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
184
185
186 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
187 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
188 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
189
190 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
191
192 GP_PIXEL_RGB888_TO_BGR888(dst_rgb, res);
193
194 return res;
195}
196
197
198static inline gp_pixel gp_mix_pixels_RGBA8888_RGB555(gp_pixel src, gp_pixel dst)
199{
200 /* Extract the alpha channel */
201 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
202
203 /* Convert the pixel to RGB888, mix the values */
204 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
205
206 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
207 GP_PIXEL_RGB555_TO_RGB888(dst, dst_rgb);
208
209 int sr, sg, sb;
210 int dr, dg, db;
211
212 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
213 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
214 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
215
216 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
217 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
218 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
219
220
221 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
222 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
223 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
224
225 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
226
227 GP_PIXEL_RGB888_TO_RGB555(dst_rgb, res);
228
229 return res;
230}
231
232
233static inline gp_pixel gp_mix_pixels_RGBA8888_RGB565(gp_pixel src, gp_pixel dst)
234{
235 /* Extract the alpha channel */
236 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
237
238 /* Convert the pixel to RGB888, mix the values */
239 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
240
241 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
242 GP_PIXEL_RGB565_TO_RGB888(dst, dst_rgb);
243
244 int sr, sg, sb;
245 int dr, dg, db;
246
247 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
248 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
249 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
250
251 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
252 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
253 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
254
255
256 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
257 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
258 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
259
260 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
261
262 GP_PIXEL_RGB888_TO_RGB565(dst_rgb, res);
263
264 return res;
265}
266
267
268static inline gp_pixel gp_mix_pixels_RGBA8888_RGB666(gp_pixel src, gp_pixel dst)
269{
270 /* Extract the alpha channel */
271 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
272
273 /* Convert the pixel to RGB888, mix the values */
274 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
275
276 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
277 GP_PIXEL_RGB666_TO_RGB888(dst, dst_rgb);
278
279 int sr, sg, sb;
280 int dr, dg, db;
281
282 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
283 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
284 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
285
286 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
287 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
288 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
289
290
291 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
292 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
293 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
294
295 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
296
297 GP_PIXEL_RGB888_TO_RGB666(dst_rgb, res);
298
299 return res;
300}
301
302
303static inline gp_pixel gp_mix_pixels_RGBA8888_RGB332(gp_pixel src, gp_pixel dst)
304{
305 /* Extract the alpha channel */
306 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
307
308 /* Convert the pixel to RGB888, mix the values */
309 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
310
311 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
312 GP_PIXEL_RGB332_TO_RGB888(dst, dst_rgb);
313
314 int sr, sg, sb;
315 int dr, dg, db;
316
317 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
318 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
319 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
320
321 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
322 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
323 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
324
325
326 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
327 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
328 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
329
330 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
331
332 GP_PIXEL_RGB888_TO_RGB332(dst_rgb, res);
333
334 return res;
335}
336
337
338static inline gp_pixel gp_mix_pixels_RGBA8888_CMYK8888(gp_pixel src, gp_pixel dst)
339{
340 /* Extract the alpha channel */
341 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
342
343 /* Convert the pixel to RGB888, mix the values */
344 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
345
346 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
347 GP_PIXEL_CMYK8888_TO_RGB888(dst, dst_rgb);
348
349 int sr, sg, sb;
350 int dr, dg, db;
351
352 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
353 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
354 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
355
356 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
357 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
358 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
359
360
361 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
362 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
363 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
364
365 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
366
367 GP_PIXEL_RGB888_TO_CMYK8888(dst_rgb, res);
368
369 return res;
370}
371
372
373static inline gp_pixel gp_mix_pixels_RGBA8888_G1_DB(gp_pixel src, gp_pixel dst)
374{
375 /* Extract the alpha channel */
376 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
377
378 /* Convert the pixel to RGB888, mix the values */
379 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
380
381 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
382 GP_PIXEL_G1_DB_TO_RGB888(dst, dst_rgb);
383
384 int sr, sg, sb;
385 int dr, dg, db;
386
387 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
388 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
389 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
390
391 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
392 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
393 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
394
395
396 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
397 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
398 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
399
400 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
401
402 GP_PIXEL_RGB888_TO_G1_DB(dst_rgb, res);
403
404 return res;
405}
406
407
408static inline gp_pixel gp_mix_pixels_RGBA8888_G2_DB(gp_pixel src, gp_pixel dst)
409{
410 /* Extract the alpha channel */
411 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
412
413 /* Convert the pixel to RGB888, mix the values */
414 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
415
416 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
417 GP_PIXEL_G2_DB_TO_RGB888(dst, dst_rgb);
418
419 int sr, sg, sb;
420 int dr, dg, db;
421
422 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
423 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
424 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
425
426 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
427 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
428 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
429
430
431 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
432 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
433 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
434
435 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
436
437 GP_PIXEL_RGB888_TO_G2_DB(dst_rgb, res);
438
439 return res;
440}
441
442
443static inline gp_pixel gp_mix_pixels_RGBA8888_G4_DB(gp_pixel src, gp_pixel dst)
444{
445 /* Extract the alpha channel */
446 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
447
448 /* Convert the pixel to RGB888, mix the values */
449 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
450
451 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
452 GP_PIXEL_G4_DB_TO_RGB888(dst, dst_rgb);
453
454 int sr, sg, sb;
455 int dr, dg, db;
456
457 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
458 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
459 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
460
461 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
462 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
463 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
464
465
466 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
467 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
468 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
469
470 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
471
472 GP_PIXEL_RGB888_TO_G4_DB(dst_rgb, res);
473
474 return res;
475}
476
477
478static inline gp_pixel gp_mix_pixels_RGBA8888_G1_UB(gp_pixel src, gp_pixel dst)
479{
480 /* Extract the alpha channel */
481 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
482
483 /* Convert the pixel to RGB888, mix the values */
484 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
485
486 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
487 GP_PIXEL_G1_UB_TO_RGB888(dst, dst_rgb);
488
489 int sr, sg, sb;
490 int dr, dg, db;
491
492 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
493 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
494 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
495
496 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
497 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
498 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
499
500
501 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
502 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
503 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
504
505 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
506
507 GP_PIXEL_RGB888_TO_G1_UB(dst_rgb, res);
508
509 return res;
510}
511
512
513static inline gp_pixel gp_mix_pixels_RGBA8888_G2_UB(gp_pixel src, gp_pixel dst)
514{
515 /* Extract the alpha channel */
516 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
517
518 /* Convert the pixel to RGB888, mix the values */
519 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
520
521 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
522 GP_PIXEL_G2_UB_TO_RGB888(dst, dst_rgb);
523
524 int sr, sg, sb;
525 int dr, dg, db;
526
527 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
528 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
529 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
530
531 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
532 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
533 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
534
535
536 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
537 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
538 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
539
540 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
541
542 GP_PIXEL_RGB888_TO_G2_UB(dst_rgb, res);
543
544 return res;
545}
546
547
548static inline gp_pixel gp_mix_pixels_RGBA8888_G4_UB(gp_pixel src, gp_pixel dst)
549{
550 /* Extract the alpha channel */
551 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
552
553 /* Convert the pixel to RGB888, mix the values */
554 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
555
556 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
557 GP_PIXEL_G4_UB_TO_RGB888(dst, dst_rgb);
558
559 int sr, sg, sb;
560 int dr, dg, db;
561
562 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
563 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
564 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
565
566 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
567 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
568 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
569
570
571 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
572 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
573 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
574
575 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
576
577 GP_PIXEL_RGB888_TO_G4_UB(dst_rgb, res);
578
579 return res;
580}
581
582
583static inline gp_pixel gp_mix_pixels_RGBA8888_G8(gp_pixel src, gp_pixel dst)
584{
585 /* Extract the alpha channel */
586 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
587
588 /* Convert the pixel to RGB888, mix the values */
589 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
590
591 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
592 GP_PIXEL_G8_TO_RGB888(dst, dst_rgb);
593
594 int sr, sg, sb;
595 int dr, dg, db;
596
597 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
598 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
599 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
600
601 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
602 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
603 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
604
605
606 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
607 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
608 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
609
610 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
611
612 GP_PIXEL_RGB888_TO_G8(dst_rgb, res);
613
614 return res;
615}
616
617
618static inline gp_pixel gp_mix_pixels_RGBA8888_GA88(gp_pixel src, gp_pixel dst)
619{
620 /* Extract the alpha channel */
621 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
622
623 /* Convert the pixel to RGB888, mix the values */
624 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
625
626 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
627 GP_PIXEL_GA88_TO_RGB888(dst, dst_rgb);
628
629 int sr, sg, sb;
630 int dr, dg, db;
631
632 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
633 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
634 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
635
636 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
637 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
638 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
639
640
641 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
642 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
643 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
644
645 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
646
647 GP_PIXEL_RGB888_TO_GA88(dst_rgb, res);
648
649 return res;
650}
651
652
653static inline gp_pixel gp_mix_pixels_RGBA8888_G16(gp_pixel src, gp_pixel dst)
654{
655 /* Extract the alpha channel */
656 unsigned int alpha = GP_PIXEL_GET_A_RGBA8888(src);
657
658 /* Convert the pixel to RGB888, mix the values */
659 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
660
661 GP_PIXEL_RGBA8888_TO_RGB888(src, src_rgb);
662 GP_PIXEL_G16_TO_RGB888(dst, dst_rgb);
663
664 int sr, sg, sb;
665 int dr, dg, db;
666
667 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
668 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
669 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
670
671 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
672 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
673 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
674
675
676 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
677 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
678 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
679
680 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
681
682 GP_PIXEL_RGB888_TO_G16(dst_rgb, res);
683
684 return res;
685}
686
687
688static inline gp_pixel gp_mix_pixels_GA88_RGB101010(gp_pixel src, gp_pixel dst)
689{
690 /* Extract the alpha channel */
691 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
692
693 /* Convert the pixel to RGB888, mix the values */
694 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
695
696 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
697 GP_PIXEL_RGB101010_TO_RGB888(dst, dst_rgb);
698
699 int sr, sg, sb;
700 int dr, dg, db;
701
702 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
703 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
704 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
705
706 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
707 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
708 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
709
710
711 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
712 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
713 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
714
715 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
716
717 GP_PIXEL_RGB888_TO_RGB101010(dst_rgb, res);
718
719 return res;
720}
721
722
723static inline gp_pixel gp_mix_pixels_GA88_xRGB8888(gp_pixel src, gp_pixel dst)
724{
725 /* Extract the alpha channel */
726 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
727
728 /* Convert the pixel to RGB888, mix the values */
729 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
730
731 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
732 GP_PIXEL_xRGB8888_TO_RGB888(dst, dst_rgb);
733
734 int sr, sg, sb;
735 int dr, dg, db;
736
737 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
738 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
739 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
740
741 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
742 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
743 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
744
745
746 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
747 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
748 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
749
750 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
751
752 GP_PIXEL_RGB888_TO_xRGB8888(dst_rgb, res);
753
754 return res;
755}
756
757
758static inline gp_pixel gp_mix_pixels_GA88_RGBA8888(gp_pixel src, gp_pixel dst)
759{
760 /* Extract the alpha channel */
761 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
762
763 /* Convert the pixel to RGB888, mix the values */
764 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
765
766 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
767 GP_PIXEL_RGBA8888_TO_RGB888(dst, dst_rgb);
768
769 int sr, sg, sb;
770 int dr, dg, db;
771
772 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
773 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
774 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
775
776 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
777 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
778 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
779
780
781 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
782 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
783 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
784
785 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
786
787 GP_PIXEL_RGB888_TO_RGBA8888(dst_rgb, res);
788
789 return res;
790}
791
792
793static inline gp_pixel gp_mix_pixels_GA88_RGB888(gp_pixel src, gp_pixel dst)
794{
795 /* Extract the alpha channel */
796 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
797
798 /* Convert the pixel to RGB888, mix the values */
799 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
800
801 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
802 GP_PIXEL_RGB888_TO_RGB888(dst, dst_rgb);
803
804 int sr, sg, sb;
805 int dr, dg, db;
806
807 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
808 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
809 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
810
811 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
812 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
813 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
814
815
816 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
817 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
818 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
819
820 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
821
822 GP_PIXEL_RGB888_TO_RGB888(dst_rgb, res);
823
824 return res;
825}
826
827
828static inline gp_pixel gp_mix_pixels_GA88_BGR888(gp_pixel src, gp_pixel dst)
829{
830 /* Extract the alpha channel */
831 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
832
833 /* Convert the pixel to RGB888, mix the values */
834 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
835
836 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
837 GP_PIXEL_BGR888_TO_RGB888(dst, dst_rgb);
838
839 int sr, sg, sb;
840 int dr, dg, db;
841
842 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
843 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
844 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
845
846 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
847 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
848 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
849
850
851 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
852 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
853 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
854
855 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
856
857 GP_PIXEL_RGB888_TO_BGR888(dst_rgb, res);
858
859 return res;
860}
861
862
863static inline gp_pixel gp_mix_pixels_GA88_RGB555(gp_pixel src, gp_pixel dst)
864{
865 /* Extract the alpha channel */
866 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
867
868 /* Convert the pixel to RGB888, mix the values */
869 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
870
871 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
872 GP_PIXEL_RGB555_TO_RGB888(dst, dst_rgb);
873
874 int sr, sg, sb;
875 int dr, dg, db;
876
877 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
878 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
879 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
880
881 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
882 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
883 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
884
885
886 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
887 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
888 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
889
890 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
891
892 GP_PIXEL_RGB888_TO_RGB555(dst_rgb, res);
893
894 return res;
895}
896
897
898static inline gp_pixel gp_mix_pixels_GA88_RGB565(gp_pixel src, gp_pixel dst)
899{
900 /* Extract the alpha channel */
901 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
902
903 /* Convert the pixel to RGB888, mix the values */
904 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
905
906 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
907 GP_PIXEL_RGB565_TO_RGB888(dst, dst_rgb);
908
909 int sr, sg, sb;
910 int dr, dg, db;
911
912 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
913 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
914 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
915
916 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
917 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
918 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
919
920
921 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
922 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
923 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
924
925 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
926
927 GP_PIXEL_RGB888_TO_RGB565(dst_rgb, res);
928
929 return res;
930}
931
932
933static inline gp_pixel gp_mix_pixels_GA88_RGB666(gp_pixel src, gp_pixel dst)
934{
935 /* Extract the alpha channel */
936 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
937
938 /* Convert the pixel to RGB888, mix the values */
939 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
940
941 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
942 GP_PIXEL_RGB666_TO_RGB888(dst, dst_rgb);
943
944 int sr, sg, sb;
945 int dr, dg, db;
946
947 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
948 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
949 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
950
951 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
952 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
953 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
954
955
956 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
957 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
958 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
959
960 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
961
962 GP_PIXEL_RGB888_TO_RGB666(dst_rgb, res);
963
964 return res;
965}
966
967
968static inline gp_pixel gp_mix_pixels_GA88_RGB332(gp_pixel src, gp_pixel dst)
969{
970 /* Extract the alpha channel */
971 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
972
973 /* Convert the pixel to RGB888, mix the values */
974 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
975
976 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
977 GP_PIXEL_RGB332_TO_RGB888(dst, dst_rgb);
978
979 int sr, sg, sb;
980 int dr, dg, db;
981
982 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
983 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
984 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
985
986 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
987 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
988 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
989
990
991 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
992 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
993 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
994
995 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
996
997 GP_PIXEL_RGB888_TO_RGB332(dst_rgb, res);
998
999 return res;
1000}
1001
1002
1003static inline gp_pixel gp_mix_pixels_GA88_CMYK8888(gp_pixel src, gp_pixel dst)
1004{
1005 /* Extract the alpha channel */
1006 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1007
1008 /* Convert the pixel to RGB888, mix the values */
1009 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1010
1011 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1012 GP_PIXEL_CMYK8888_TO_RGB888(dst, dst_rgb);
1013
1014 int sr, sg, sb;
1015 int dr, dg, db;
1016
1017 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1018 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1019 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1020
1021 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1022 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1023 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1024
1025
1026 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1027 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1028 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1029
1030 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1031
1032 GP_PIXEL_RGB888_TO_CMYK8888(dst_rgb, res);
1033
1034 return res;
1035}
1036
1037
1038static inline gp_pixel gp_mix_pixels_GA88_G1_DB(gp_pixel src, gp_pixel dst)
1039{
1040 /* Extract the alpha channel */
1041 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1042
1043 /* Convert the pixel to RGB888, mix the values */
1044 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1045
1046 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1047 GP_PIXEL_G1_DB_TO_RGB888(dst, dst_rgb);
1048
1049 int sr, sg, sb;
1050 int dr, dg, db;
1051
1052 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1053 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1054 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1055
1056 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1057 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1058 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1059
1060
1061 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1062 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1063 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1064
1065 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1066
1067 GP_PIXEL_RGB888_TO_G1_DB(dst_rgb, res);
1068
1069 return res;
1070}
1071
1072
1073static inline gp_pixel gp_mix_pixels_GA88_G2_DB(gp_pixel src, gp_pixel dst)
1074{
1075 /* Extract the alpha channel */
1076 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1077
1078 /* Convert the pixel to RGB888, mix the values */
1079 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1080
1081 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1082 GP_PIXEL_G2_DB_TO_RGB888(dst, dst_rgb);
1083
1084 int sr, sg, sb;
1085 int dr, dg, db;
1086
1087 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1088 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1089 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1090
1091 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1092 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1093 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1094
1095
1096 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1097 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1098 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1099
1100 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1101
1102 GP_PIXEL_RGB888_TO_G2_DB(dst_rgb, res);
1103
1104 return res;
1105}
1106
1107
1108static inline gp_pixel gp_mix_pixels_GA88_G4_DB(gp_pixel src, gp_pixel dst)
1109{
1110 /* Extract the alpha channel */
1111 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1112
1113 /* Convert the pixel to RGB888, mix the values */
1114 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1115
1116 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1117 GP_PIXEL_G4_DB_TO_RGB888(dst, dst_rgb);
1118
1119 int sr, sg, sb;
1120 int dr, dg, db;
1121
1122 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1123 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1124 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1125
1126 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1127 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1128 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1129
1130
1131 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1132 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1133 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1134
1135 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1136
1137 GP_PIXEL_RGB888_TO_G4_DB(dst_rgb, res);
1138
1139 return res;
1140}
1141
1142
1143static inline gp_pixel gp_mix_pixels_GA88_G1_UB(gp_pixel src, gp_pixel dst)
1144{
1145 /* Extract the alpha channel */
1146 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1147
1148 /* Convert the pixel to RGB888, mix the values */
1149 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1150
1151 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1152 GP_PIXEL_G1_UB_TO_RGB888(dst, dst_rgb);
1153
1154 int sr, sg, sb;
1155 int dr, dg, db;
1156
1157 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1158 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1159 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1160
1161 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1162 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1163 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1164
1165
1166 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1167 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1168 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1169
1170 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1171
1172 GP_PIXEL_RGB888_TO_G1_UB(dst_rgb, res);
1173
1174 return res;
1175}
1176
1177
1178static inline gp_pixel gp_mix_pixels_GA88_G2_UB(gp_pixel src, gp_pixel dst)
1179{
1180 /* Extract the alpha channel */
1181 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1182
1183 /* Convert the pixel to RGB888, mix the values */
1184 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1185
1186 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1187 GP_PIXEL_G2_UB_TO_RGB888(dst, dst_rgb);
1188
1189 int sr, sg, sb;
1190 int dr, dg, db;
1191
1192 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1193 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1194 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1195
1196 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1197 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1198 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1199
1200
1201 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1202 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1203 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1204
1205 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1206
1207 GP_PIXEL_RGB888_TO_G2_UB(dst_rgb, res);
1208
1209 return res;
1210}
1211
1212
1213static inline gp_pixel gp_mix_pixels_GA88_G4_UB(gp_pixel src, gp_pixel dst)
1214{
1215 /* Extract the alpha channel */
1216 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1217
1218 /* Convert the pixel to RGB888, mix the values */
1219 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1220
1221 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1222 GP_PIXEL_G4_UB_TO_RGB888(dst, dst_rgb);
1223
1224 int sr, sg, sb;
1225 int dr, dg, db;
1226
1227 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1228 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1229 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1230
1231 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1232 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1233 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1234
1235
1236 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1237 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1238 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1239
1240 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1241
1242 GP_PIXEL_RGB888_TO_G4_UB(dst_rgb, res);
1243
1244 return res;
1245}
1246
1247
1248static inline gp_pixel gp_mix_pixels_GA88_G8(gp_pixel src, gp_pixel dst)
1249{
1250 /* Extract the alpha channel */
1251 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1252
1253 /* Convert the pixel to RGB888, mix the values */
1254 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1255
1256 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1257 GP_PIXEL_G8_TO_RGB888(dst, dst_rgb);
1258
1259 int sr, sg, sb;
1260 int dr, dg, db;
1261
1262 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1263 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1264 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1265
1266 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1267 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1268 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1269
1270
1271 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1272 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1273 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1274
1275 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1276
1277 GP_PIXEL_RGB888_TO_G8(dst_rgb, res);
1278
1279 return res;
1280}
1281
1282
1283static inline gp_pixel gp_mix_pixels_GA88_GA88(gp_pixel src, gp_pixel dst)
1284{
1285 /* Extract the alpha channel */
1286 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1287
1288 /* Convert the pixel to RGB888, mix the values */
1289 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1290
1291 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1292 GP_PIXEL_GA88_TO_RGB888(dst, dst_rgb);
1293
1294 int sr, sg, sb;
1295 int dr, dg, db;
1296
1297 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1298 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1299 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1300
1301 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1302 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1303 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1304
1305
1306 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1307 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1308 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1309
1310 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1311
1312 GP_PIXEL_RGB888_TO_GA88(dst_rgb, res);
1313
1314 return res;
1315}
1316
1317
1318static inline gp_pixel gp_mix_pixels_GA88_G16(gp_pixel src, gp_pixel dst)
1319{
1320 /* Extract the alpha channel */
1321 unsigned int alpha = GP_PIXEL_GET_A_GA88(src);
1322
1323 /* Convert the pixel to RGB888, mix the values */
1324 gp_pixel src_rgb = 0, dst_rgb = 0, res = 0;
1325
1326 GP_PIXEL_GA88_TO_RGB888(src, src_rgb);
1327 GP_PIXEL_G16_TO_RGB888(dst, dst_rgb);
1328
1329 int sr, sg, sb;
1330 int dr, dg, db;
1331
1332 sr = GP_PIXEL_GET_R_RGB888(src_rgb);
1333 sg = GP_PIXEL_GET_G_RGB888(src_rgb);
1334 sb = GP_PIXEL_GET_B_RGB888(src_rgb);
1335
1336 dr = GP_PIXEL_GET_R_RGB888(dst_rgb);
1337 dg = GP_PIXEL_GET_G_RGB888(dst_rgb);
1338 db = GP_PIXEL_GET_B_RGB888(dst_rgb);
1339
1340
1341 dr = (dr * (255 - alpha) + sr * alpha + 127) / 255;
1342 dg = (dg * (255 - alpha) + sg * alpha + 127) / 255;
1343 db = (db * (255 - alpha) + sb * alpha + 127) / 255;
1344
1345 dst_rgb = GP_PIXEL_CREATE_RGB888(dr, dg, db);
1346
1347 GP_PIXEL_RGB888_TO_G16(dst_rgb, res);
1348
1349 return res;
1350}
1351
1352#endif /* GP_MIX_PIXELS2_GEN_H */
uint32_t gp_pixel
Pixel integer value.
Definition gp_types.h:33
A pixel description.