App
Blender_public.cpp
Go to the documentation of this file.
1 
6 #include "Blender.hpp"
7 
8 namespace app {
9 
11  const TBitmap<px_4x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig) {
12  if (src.getType() != RGBA || src.getData() == NULL) {
13  return 1;
14  } // Toto by mělo garantovat že není NULL a využívá správný model
15  if (dst.getType() != RGBA || dst.getData() == NULL) {
16  return 2;
17  }
18 
19  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
20  src.getBpp());
21  PointerArea dstArea = PointerArea(dst.getData(), dst.getRect(),
22  dst.getBpp());
23 
24  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
25  if (err) {
26  return 100 + err;
27  }
28 
29  blendf_argb_sd f = Blender::getBlendFunction_argb_sd(mode);
30  if (f == NULL) {
31  return 3;
32  } else {
33  f((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
34  (byte *) dstArea.getAreaEnd(),
35  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
36  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
37  dstArea.getByteOffset());
38  return 0;
39  }
40 }
41 
43  const TBitmap<px_4x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig,
44  double alpha) {
45  if (src.getType() != RGBA || src.getData() == NULL) {
46  return 1;
47  } // Toto by mělo garantovat že není NULL a využívá správný model
48  if (dst.getType() != RGBA || dst.getData() == NULL) {
49  return 2;
50  }
51 
52  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
53  src.getBpp());
54  PointerArea dstArea = PointerArea(dst.getData(), dst.getRect(),
55  dst.getBpp());
56 
57  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
58  if (err) {
59  return 100 + err;
60  }
61 
62  blendf_argb_sda f = Blender::getBlendFunction_argb_sda(mode);
63  if (f == NULL) {
64  return 3;
65  } else {
66  f((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
67  (byte *) dstArea.getAreaEnd(),
68  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
69  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
70  dstArea.getByteOffset(), alpha);
71  return 0;
72  }
73 }
74 
76  px_4x8bit * src, Rect dstRect) {
77  if (dst.getType() != RGBA || dst.getData() == NULL) {
78  return 1;
79  }
80 
81  PointerArea dstArea = PointerArea(dst.getData(), dst.getRect(), dstRect,
82  dst.getBpp());
83 
84  blendf_argb_cd f = Blender::getBlendFunction_argb_cd(mode);
85  if (f == NULL) {
86  return 2;
87  } else {
88  f((byte *) src, (byte *) dstArea.getAreaBgn(),
89  (byte *) dstArea.getAreaEnd(),
90  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
91  dstArea.getOrigByteWidth(), dstArea.bpp, dstArea.getByteOffset());
92  return 0;
93  }
94 }
95 
97  px_4x8bit * src, Rect dstRect, double alpha) {
98 // ARGB_Pixel clr(* src);
99 // clr.seta(alpha * clr.geta() + 0.5);
100 // return Blender::blendTo(mode, dst, clr.getDataAdress(), dstRect);
101  px_4x8bit modSrc = *src;
102  px_1x8bit * aCh = (px_1x8bit *) &modSrc;
103  aCh += 3;
104  *aCh = (*aCh) * alpha + 0.5;
105  return Blender::blendTo(mode, dst, &modSrc, dstRect);
106 
107 }
108 
109 //-------------------------------------------------------------------------------------------------------------------------------------------------------------
110 //-------------------------------------------------------------------------------------------------------------------------------------------------------------
111 //-------------------------------------------------------------------------------------------------------------------------------------------------------------
112 
114  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig) {
115  if (src.getType() != MONO || src.getData() == NULL) {
116  return 1;
117  }
118  if (dst.getType() != MONO || dst.getData() == NULL) {
119  return 2;
120  }
121 
122  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
123  src.getBpp());
124  PointerArea dstArea = dst.getPointerArea();
125 
126  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
127  if (err) {
128  return 100 + err;
129  }
130 
132  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
133  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
134  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
135  dstArea.getByteOffset());
136  return 0;
137 }
138 
140  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig,
141  double alpha) {
142  if (src.getType() != MONO || src.getData() == NULL) {
143  return 1;
144  }
145  if (dst.getType() != MONO || dst.getData() == NULL) {
146  return 2;
147  }
148 
149  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
150  src.getBpp());
151  PointerArea dstArea = dst.getPointerArea();
152 
153  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
154  if (err) {
155  return 100 + err;
156  }
157 
159  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
160  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
161  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
162  dstArea.getByteOffset(), alpha);
163  return 0;
164 }
165 
168  Rect mskRect, Point srcOrig, Point mskOrig) {
169  if (msk.getType() != MONO || msk.getData() == NULL) {
170  return 1;
171  }
172  if (dst.getType() != MONO || dst.getData() == NULL) {
173  return 2;
174  }
175  if (src.getType() != MONO || src.getData() == NULL) {
176  return 3;
177  }
178 
179  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
180  PointerArea srcArea = src.getPointerArea();
181  PointerArea dstArea = dst.getPointerArea();
182 
183  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
184  if (err) {
185  return 100 + err;
186  }
187 
188  blend_add_onech_sdm((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
189  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
190  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
191  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
192  dstArea.getByteOffset(), mskArea.getByteOffset());
193  return 0;
194 }
195 
198  Rect mskRect, Point srcOrig, Point mskOrig, double alpha) {
199  if (msk.getType() != MONO || msk.getData() == NULL) {
200  return 1;
201  }
202  if (dst.getType() != MONO || dst.getData() == NULL) {
203  return 2;
204  }
205  if (src.getType() != MONO || src.getData() == NULL) {
206  return 3;
207  }
208 
209  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
210  PointerArea srcArea = src.getPointerArea();
211  PointerArea dstArea = dst.getPointerArea();
212 
213  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
214  if (err) {
215  return 100 + err;
216  }
217 
218  blend_add_onech_sdma((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
219  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
220  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
221  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
222  dstArea.getByteOffset(), mskArea.getByteOffset(), alpha);
223  return 0;
224 }
225 
226 
228  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig) {
229  if (src.getType() != MONO || src.getData() == NULL) {
230  return 1;
231  }
232  if (dst.getType() != MONO || dst.getData() == NULL) {
233  return 2;
234  }
235 
236  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
237  src.getBpp());
238  PointerArea dstArea = dst.getPointerArea();
239 
240  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
241  if (err) {
242  return 100 + err;
243  }
244 
246  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
247  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
248  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
249  dstArea.getByteOffset());
250  return 0;
251 }
252 
254  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig,
255  double alpha) {
256  if (src.getType() != MONO || src.getData() == NULL) {
257  return 1;
258  }
259  if (dst.getType() != MONO || dst.getData() == NULL) {
260  return 2;
261  }
262 
263  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
264  src.getBpp());
265  PointerArea dstArea = dst.getPointerArea();
266 
267  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
268  if (err) {
269  return 100 + err;
270  }
271 
273  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
274  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
275  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
276  dstArea.getByteOffset(), alpha);
277  return 0;
278 }
279 
282  Rect mskRect, Point srcOrig, Point mskOrig) {
283  if (msk.getType() != MONO || msk.getData() == NULL) {
284  return 1;
285  }
286  if (dst.getType() != MONO || dst.getData() == NULL) {
287  return 2;
288  }
289  if (src.getType() != MONO || src.getData() == NULL) {
290  return 3;
291  }
292 
293  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
294  PointerArea srcArea = src.getPointerArea();
295  PointerArea dstArea = dst.getPointerArea();
296 
297  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
298  if (err) {
299  return 100 + err;
300  }
301 
302  blend_remove_onech_sdm((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
303  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
304  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
305  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
306  dstArea.getByteOffset(), mskArea.getByteOffset());
307  return 0;
308 }
309 
312  Rect mskRect, Point srcOrig, Point mskOrig, double alpha) {
313  if (msk.getType() != MONO || msk.getData() == NULL) {
314  return 1;
315  }
316  if (dst.getType() != MONO || dst.getData() == NULL) {
317  return 2;
318  }
319  if (src.getType() != MONO || src.getData() == NULL) {
320  return 3;
321  }
322 
323  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
324  PointerArea srcArea = src.getPointerArea();
325  PointerArea dstArea = dst.getPointerArea();
326 
327  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
328  if (err) {
329  return 100 + err;
330  }
331 
332  blend_remove_onech_sdma((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
333  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
334  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
335  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
336  dstArea.getByteOffset(), mskArea.getByteOffset(), alpha);
337  return 0;
338 }
339 
340 
341 
342 
343 
344 //=============================================================================================================================================================
345 //=============================================================================================================================================================
346 //=============================================================================================================================================================
347 
348 
349 
350 
351 
352 
353 
354 
356  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig) {
357  if (src.getType() != MONO || src.getData() == NULL) {
358  return 1;
359  }
360  if (dst.getType() != RGBA || dst.getData() == NULL) {
361  return 2;
362  }
363 
364  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
365  src.getBpp());
366  PointerArea dstArea = dst.getPointerArea();
367 
368  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
369  if (err) {
370  return 100 + err;
371  }
372 
374  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
375  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
376  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
377  dstArea.getByteOffset());
378  return 0;
379 }
380 
382  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig,
383  double alpha) {
384  if (src.getType() != MONO || src.getData() == NULL) {
385  return 1;
386  }
387  if (dst.getType() != RGBA || dst.getData() == NULL) {
388  return 2;
389  }
390 
391  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
392  src.getBpp());
393  PointerArea dstArea = dst.getPointerArea();
394 
395  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
396  if (err) {
397  return 100 + err;
398  }
399 
401  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
402  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
403  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
404  dstArea.getByteOffset(), alpha);
405  return 0;
406 }
407 
410  Rect mskRect, Point srcOrig, Point mskOrig) {
411  if (msk.getType() != MONO || msk.getData() == NULL) {
412  return 1;
413  }
414  if (dst.getType() != RGBA || dst.getData() == NULL) {
415  return 2;
416  }
417  if (src.getType() != MONO || src.getData() == NULL) {
418  return 3;
419  }
420 
421  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
422  PointerArea srcArea = src.getPointerArea();
423  PointerArea dstArea = dst.getPointerArea();
424 
425  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
426  if (err) {
427  return 100 + err;
428  }
429 
430  blend_add_argb_sdm((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
431  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
432  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
433  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
434  dstArea.getByteOffset(), mskArea.getByteOffset());
435  return 0;
436 }
437 
440  Rect mskRect, Point srcOrig, Point mskOrig, double alpha) {
441  if (msk.getType() != MONO || msk.getData() == NULL) {
442  return 1;
443  }
444  if (dst.getType() != RGBA || dst.getData() == NULL) {
445  return 2;
446  }
447  if (src.getType() != MONO || src.getData() == NULL) {
448  return 3;
449  }
450 
451  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
452  PointerArea srcArea = src.getPointerArea();
453  PointerArea dstArea = dst.getPointerArea();
454 
455  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
456  if (err) {
457  return 100 + err;
458  }
459 
460  blend_add_argb_sdma((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
461  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
462  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
463  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
464  dstArea.getByteOffset(), mskArea.getByteOffset(), alpha);
465  return 0;
466 }
467 
468 
470  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig) {
471  if (src.getType() != MONO || src.getData() == NULL) {
472  return 1;
473  }
474  if (dst.getType() != RGBA || dst.getData() == NULL) {
475  return 2;
476  }
477 
478  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
479  src.getBpp());
480  PointerArea dstArea = dst.getPointerArea();
481 
482  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
483  if (err) {
484  return 100 + err;
485  }
486 
488  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
489  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
490  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
491  dstArea.getByteOffset());
492  return 0;
493 }
494 
496  const TBitmap<px_1x8bit, px_1x8bit> &src, Rect srcRect, Point srcOrig,
497  double alpha) {
498  if (src.getType() != MONO || src.getData() == NULL) {
499  return 1;
500  }
501  if (dst.getType() != RGBA || dst.getData() == NULL) {
502  return 2;
503  }
504 
505  PointerArea srcArea = PointerArea(src.getData(), src.getRect(), srcRect,
506  src.getBpp());
507  PointerArea dstArea = dst.getPointerArea();
508 
509  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig);
510  if (err) {
511  return 100 + err;
512  }
513 
515  (byte *) dstArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
516  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
517  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
518  dstArea.getByteOffset(), alpha);
519  return 0;
520 }
521 
524  Rect mskRect, Point srcOrig, Point mskOrig) {
525  if (msk.getType() != MONO || msk.getData() == NULL) {
526  return 1;
527  }
528  if (dst.getType() != RGBA || dst.getData() == NULL) {
529  return 2;
530  }
531  if (src.getType() != MONO || src.getData() == NULL) {
532  return 3;
533  }
534 
535  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
536  PointerArea srcArea = src.getPointerArea();
537  PointerArea dstArea = dst.getPointerArea();
538 
539  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
540  if (err) {
541  return 100 + err;
542  }
543 
544  blend_remove_argb_sdm((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
545  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
546  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
547  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
548  dstArea.getByteOffset(), mskArea.getByteOffset());
549  return 0;
550 }
551 
554  Rect mskRect, Point srcOrig, Point mskOrig, double alpha) {
555  if (msk.getType() != MONO || msk.getData() == NULL) {
556  return 1;
557  }
558  if (dst.getType() != RGBA || dst.getData() == NULL) {
559  return 2;
560  }
561  if (src.getType() != MONO || src.getData() == NULL) {
562  return 3;
563  }
564 
565  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
566  PointerArea srcArea = src.getPointerArea();
567  PointerArea dstArea = dst.getPointerArea();
568 
569  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea, mskOrig);
570  if (err) {
571  return 100 + err;
572  }
573 
574  blend_remove_argb_sdma((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
575  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
576  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
577  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
578  dstArea.getByteOffset(), mskArea.getByteOffset(), alpha);
579  return 0;
580 }
581 
582 
583 
584 
585 
586 
587 
588 
589 
590 
591 
592 
593 
594 
595 
596 
597 
598 
599 
600 
601 
602 
603 
604 
605 
606 
607 
608 
609 
610 
611 
612 
613 
614 
615 
616 
617 
618 
619 
620 
621 
622 
623 
624 
625 
626 //=============================================================================================================================================================
627 //=============================================================================================================================================================
628 //=============================================================================================================================================================
629 
631  const TBitmap<px_1x8bit, px_1x8bit> &msk, px_4x8bit * src, Rect mskRect,
632  Point mskOrig) {
633  if (msk.getType() != MONO || msk.getData() == NULL) {
634  return 1;
635  }
636  if (dst.getType() != RGBA || dst.getData() == NULL) {
637  return 2;
638  }
639 
640  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
641  PointerArea dstArea = dst.getPointerArea();
642 
643  int err = PointerArea::makeCommon(dstArea, mskArea, mskOrig);
644  if (err) {
645  return 100 + err;
646  }
647 
648  blendf_argb_cdm f = Blender::getBlendFunction_argb_cdm(mode);
649  if (f == NULL) {
650  return 3;
651  } else {
652  f((byte *) src, (byte *) dstArea.getAreaBgn(),
653  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
654  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
655  dstArea.getOrigByteWidth(), dstArea.bpp,
656  dstArea.getByteOffset(), mskArea.getByteOffset());
657  return 0;
658  }
659 }
660 
662  const TBitmap<px_1x8bit, px_1x8bit> &msk, px_4x8bit * src, Rect mskRect,
663  Point mskOrig, double alpha) {
664 // ARGB_Pixel clr(* src);
665 // clr.seta(alpha * clr.geta() + 0.5);
666 // return Blender::drawTo(mode, dst, msk, clr.getDataAdress(), mskRect, mskOrig);
667  px_4x8bit modSrc = *src;
668  px_1x8bit * aCh = (px_1x8bit *) &modSrc;
669  aCh += 3;
670  *aCh = (*aCh) * alpha + 0.5;
671  return Blender::drawTo(mode, dst, msk, &modSrc, mskRect, mskOrig);
672 }
673 
676  const TBitmap<px_4x8bit, px_1x8bit> &src, Rect mskRect, Point srcOrig,
677  Point mskOrig) {
678  if (msk.getType() != MONO || msk.getData() == NULL) {
679  return 1;
680  }
681  if (dst.getType() != RGBA || dst.getData() == NULL) {
682  return 2;
683  }
684  if (src.getType() != RGBA || src.getData() == NULL) {
685  return 3;
686  }
687 
688  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
689  PointerArea srcArea = src.getPointerArea();
690  PointerArea dstArea = dst.getPointerArea();
691 
692  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea,
693  mskOrig);
694  if (err) {
695  return 100 + err;
696  }
697 
698  blendf_argb_sdm f = Blender::getBlendFunction_argb_sdm(mode);
699  if (f == NULL) {
700  return 4;
701  } else {
702  f((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
703  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
704  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
705  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
706  dstArea.getByteOffset(), mskArea.getByteOffset());
707  return 0;
708  }
709 }
710 
713  const TBitmap<px_4x8bit, px_1x8bit> &src, Rect mskRect, Point srcOrig,
714  Point mskOrig, double alpha) {
715  if (msk.getType() != MONO || msk.getData() == NULL) {
716  return 1;
717  }
718  if (dst.getType() != RGBA || dst.getData() == NULL) {
719  return 2;
720  }
721  if (src.getType() != RGBA || src.getData() == NULL) {
722  return 3;
723  }
724 
725  PointerArea mskArea = PointerArea(msk.getData(), msk.getRect(), mskRect, msk.getBpp());
726  PointerArea srcArea = src.getPointerArea();
727  PointerArea dstArea = dst.getPointerArea();
728 
729  int err = PointerArea::makeCommon(dstArea, srcArea, srcOrig, mskArea,
730  mskOrig);
731  if (err) {
732  return 100 + err;
733  }
734 
735  blendf_argb_sdma f = Blender::getBlendFunction_argb_sdma(mode);
736  if (f == NULL) {
737  return 4;
738  } else {
739  f((byte *) srcArea.getAreaBgn(), (byte *) dstArea.getAreaBgn(),
740  (byte *) mskArea.getAreaBgn(), (byte *) dstArea.getAreaEnd(),
741  (byte *) dstArea.getAreaBgn() + dstArea.getAreaByteWidth(),
742  dstArea.getOrigByteWidth(), srcArea.getByteOffset(),
743  dstArea.getByteOffset(), mskArea.getByteOffset(), alpha);
744  return 0;
745  }
746 }
747 
748 }