App

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List
- File Members

Blender_public.cpp
Go to the documentation of this file.
1
6 #include "Blender.hpp"
7
8 namespace app {
9
10 int Blender::blendTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
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
42 int Blender::blendTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
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
75 int Blender::blendTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
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
96 int Blender::blendTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
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
113 int Blender::addTo(TBitmap<px_1x8bit, px_1x8bit> &dst,
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
131 Blender::blend_add_onech_sd((byte *) srcArea.getAreaBgn(),
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
139 int Blender::addTo(TBitmap<px_1x8bit, px_1x8bit> &dst,
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
158 Blender::blend_add_onech_sda((byte *) srcArea.getAreaBgn(),
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
166 int Blender::addTo(TBitmap<px_1x8bit, px_1x8bit> &dst,
167 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
196 int Blender::addTo(TBitmap<px_1x8bit, px_1x8bit> &dst,
197 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
227 int Blender::removeFrom(TBitmap<px_1x8bit, px_1x8bit> &dst,
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
245 Blender::blend_remove_onech_sd((byte *) srcArea.getAreaBgn(),
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
253 int Blender::removeFrom(TBitmap<px_1x8bit, px_1x8bit> &dst,
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
272 Blender::blend_remove_onech_sda((byte *) srcArea.getAreaBgn(),
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
280 int Blender::removeFrom(TBitmap<px_1x8bit, px_1x8bit> &dst,
281 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
310 int Blender::removeFrom(TBitmap<px_1x8bit, px_1x8bit> &dst,
311 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
355 int Blender::addTo(TBitmap<px_4x8bit, px_1x8bit> &dst,
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
373 Blender::blend_add_argb_sd((byte *) srcArea.getAreaBgn(),
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
381 int Blender::addTo(TBitmap<px_4x8bit, px_1x8bit> &dst,
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
400 Blender::blend_add_argb_sda((byte *) srcArea.getAreaBgn(),
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
408 int Blender::addTo(TBitmap<px_4x8bit, px_1x8bit> &dst,
409 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
438 int Blender::addTo(TBitmap<px_4x8bit, px_1x8bit> &dst,
439 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
469 int Blender::removeFrom(TBitmap<px_4x8bit, px_1x8bit> &dst,
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
487 Blender::blend_remove_argb_sd((byte *) srcArea.getAreaBgn(),
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
495 int Blender::removeFrom(TBitmap<px_4x8bit, px_1x8bit> &dst,
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
514 Blender::blend_remove_argb_sda((byte *) srcArea.getAreaBgn(),
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
522 int Blender::removeFrom(TBitmap<px_4x8bit, px_1x8bit> &dst,
523 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
552 int Blender::removeFrom(TBitmap<px_4x8bit, px_1x8bit> &dst,
553 const TBitmap<px_1x8bit, px_1x8bit> &msk, const TBitmap<px_1x8bit, px_1x8bit> &src,
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
630 int Blender::drawTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
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
661 int Blender::drawTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
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
674 int Blender::drawTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
675 const TBitmap<px_1x8bit, px_1x8bit> &msk,
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
711 int Blender::drawTo(BlendMode mode, TBitmap<px_4x8bit, px_1x8bit> &dst,
712 const TBitmap<px_1x8bit, px_1x8bit> &msk,
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 }