| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fxcodec/include/fx_codec.h" | 7 #include "core/fxcodec/include/fx_codec.h" |
| 8 #include "core/fxge/dib/dib_int.h" | 8 #include "core/fxge/dib/dib_int.h" |
| 9 #include "core/fxge/include/fx_ge.h" | 9 #include "core/fxge/include/fx_ge.h" |
| 10 | 10 |
| (...skipping 2494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2505 } | 2505 } |
| 2506 if (src_alpha == 0) { | 2506 if (src_alpha == 0) { |
| 2507 dest_scan += 4; | 2507 dest_scan += 4; |
| 2508 continue; | 2508 continue; |
| 2509 } | 2509 } |
| 2510 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2510 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 2511 dest_scan[3] = dest_alpha; | 2511 dest_scan[3] = dest_alpha; |
| 2512 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2512 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2513 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2513 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2514 int blended_colors[3]; | 2514 int blended_colors[3]; |
| 2515 uint8_t src_scan[3]; | 2515 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 2516 src_scan[0] = src_b; | 2516 static_cast<uint8_t>(src_g), |
| 2517 src_scan[1] = src_g; | 2517 static_cast<uint8_t>(src_r)}; |
| 2518 src_scan[2] = src_r; | 2518 RGB_Blend(blend_type, scan, dest_scan, blended_colors); |
| 2519 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | |
| 2520 *dest_scan = | 2519 *dest_scan = |
| 2521 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio); | 2520 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio); |
| 2522 dest_scan++; | 2521 dest_scan++; |
| 2523 *dest_scan = | 2522 *dest_scan = |
| 2524 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio); | 2523 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio); |
| 2525 dest_scan++; | 2524 dest_scan++; |
| 2526 *dest_scan = | 2525 *dest_scan = |
| 2527 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio); | 2526 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio); |
| 2528 } else if (blend_type) { | 2527 } else if (blend_type) { |
| 2529 int blended = Blend(blend_type, *dest_scan, src_b); | 2528 int blended = Blend(blend_type, *dest_scan, src_b); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2576 if (src_alpha == 0) { | 2575 if (src_alpha == 0) { |
| 2577 dest_scan += 3; | 2576 dest_scan += 3; |
| 2578 dest_alpha_scan++; | 2577 dest_alpha_scan++; |
| 2579 continue; | 2578 continue; |
| 2580 } | 2579 } |
| 2581 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2580 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 2582 *dest_alpha_scan++ = dest_alpha; | 2581 *dest_alpha_scan++ = dest_alpha; |
| 2583 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2582 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2584 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2583 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2585 int blended_colors[3]; | 2584 int blended_colors[3]; |
| 2586 uint8_t src_scan[3]; | 2585 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 2587 src_scan[0] = src_b; | 2586 static_cast<uint8_t>(src_g), |
| 2588 src_scan[1] = src_g; | 2587 static_cast<uint8_t>(src_r)}; |
| 2589 src_scan[2] = src_r; | 2588 RGB_Blend(blend_type, scan, dest_scan, blended_colors); |
| 2590 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | |
| 2591 *dest_scan = | 2589 *dest_scan = |
| 2592 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio); | 2590 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio); |
| 2593 dest_scan++; | 2591 dest_scan++; |
| 2594 *dest_scan = | 2592 *dest_scan = |
| 2595 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio); | 2593 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio); |
| 2596 dest_scan++; | 2594 dest_scan++; |
| 2597 *dest_scan = | 2595 *dest_scan = |
| 2598 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio); | 2596 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio); |
| 2599 dest_scan++; | 2597 dest_scan++; |
| 2600 } else if (blend_type) { | 2598 } else if (blend_type) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2637 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 2635 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 2638 } else { | 2636 } else { |
| 2639 src_alpha = mask_alpha * src_scan[col] / 255; | 2637 src_alpha = mask_alpha * src_scan[col] / 255; |
| 2640 } | 2638 } |
| 2641 if (src_alpha == 0) { | 2639 if (src_alpha == 0) { |
| 2642 dest_scan += Bpp; | 2640 dest_scan += Bpp; |
| 2643 continue; | 2641 continue; |
| 2644 } | 2642 } |
| 2645 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2643 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2646 int blended_colors[3]; | 2644 int blended_colors[3]; |
| 2647 uint8_t src_scan[3]; | 2645 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 2648 src_scan[0] = src_b; | 2646 static_cast<uint8_t>(src_g), |
| 2649 src_scan[1] = src_g; | 2647 static_cast<uint8_t>(src_r)}; |
| 2650 src_scan[2] = src_r; | 2648 RGB_Blend(blend_type, scan, dest_scan, blended_colors); |
| 2651 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | |
| 2652 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha); | 2649 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha); |
| 2653 dest_scan++; | 2650 dest_scan++; |
| 2654 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha); | 2651 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha); |
| 2655 dest_scan++; | 2652 dest_scan++; |
| 2656 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha); | 2653 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha); |
| 2657 } else if (blend_type) { | 2654 } else if (blend_type) { |
| 2658 int blended = Blend(blend_type, *dest_scan, src_b); | 2655 int blended = Blend(blend_type, *dest_scan, src_b); |
| 2659 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha); | 2656 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha); |
| 2660 dest_scan++; | 2657 dest_scan++; |
| 2661 blended = Blend(blend_type, *dest_scan, src_g); | 2658 blended = Blend(blend_type, *dest_scan, src_g); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2784 if (back_alpha == 0) { | 2781 if (back_alpha == 0) { |
| 2785 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)); | 2782 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)); |
| 2786 dest_scan += 4; | 2783 dest_scan += 4; |
| 2787 continue; | 2784 continue; |
| 2788 } | 2785 } |
| 2789 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2786 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 2790 dest_scan[3] = dest_alpha; | 2787 dest_scan[3] = dest_alpha; |
| 2791 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2788 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2792 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2789 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2793 int blended_colors[3]; | 2790 int blended_colors[3]; |
| 2794 uint8_t src_scan[3]; | 2791 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 2795 src_scan[0] = src_b; | 2792 static_cast<uint8_t>(src_g), |
| 2796 src_scan[1] = src_g; | 2793 static_cast<uint8_t>(src_r)}; |
| 2797 src_scan[2] = src_r; | 2794 RGB_Blend(blend_type, scan, dest_scan, blended_colors); |
| 2798 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | |
| 2799 *dest_scan = | 2795 *dest_scan = |
| 2800 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio); | 2796 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio); |
| 2801 dest_scan++; | 2797 dest_scan++; |
| 2802 *dest_scan = | 2798 *dest_scan = |
| 2803 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio); | 2799 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio); |
| 2804 dest_scan++; | 2800 dest_scan++; |
| 2805 *dest_scan = | 2801 *dest_scan = |
| 2806 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio); | 2802 FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio); |
| 2807 } else if (blend_type) { | 2803 } else if (blend_type) { |
| 2808 int blended = Blend(blend_type, *dest_scan, src_b); | 2804 int blended = Blend(blend_type, *dest_scan, src_b); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2859 src_alpha = mask_alpha * clip_scan[col] / 255; | 2855 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 2860 } else { | 2856 } else { |
| 2861 src_alpha = mask_alpha; | 2857 src_alpha = mask_alpha; |
| 2862 } | 2858 } |
| 2863 if (src_alpha == 0) { | 2859 if (src_alpha == 0) { |
| 2864 dest_scan += Bpp; | 2860 dest_scan += Bpp; |
| 2865 continue; | 2861 continue; |
| 2866 } | 2862 } |
| 2867 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2863 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2868 int blended_colors[3]; | 2864 int blended_colors[3]; |
| 2869 uint8_t src_scan[3]; | 2865 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 2870 src_scan[0] = src_b; | 2866 static_cast<uint8_t>(src_g), |
| 2871 src_scan[1] = src_g; | 2867 static_cast<uint8_t>(src_r)}; |
| 2872 src_scan[2] = src_r; | 2868 RGB_Blend(blend_type, scan, dest_scan, blended_colors); |
| 2873 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | |
| 2874 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha); | 2869 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha); |
| 2875 dest_scan++; | 2870 dest_scan++; |
| 2876 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha); | 2871 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha); |
| 2877 dest_scan++; | 2872 dest_scan++; |
| 2878 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha); | 2873 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha); |
| 2879 } else if (blend_type) { | 2874 } else if (blend_type) { |
| 2880 int blended = Blend(blend_type, *dest_scan, src_b); | 2875 int blended = Blend(blend_type, *dest_scan, src_b); |
| 2881 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha); | 2876 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha); |
| 2882 dest_scan++; | 2877 dest_scan++; |
| 2883 blended = Blend(blend_type, *dest_scan, src_g); | 2878 blended = Blend(blend_type, *dest_scan, src_g); |
| (...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3577 } | 3572 } |
| 3578 if (src_alpha == 0) { | 3573 if (src_alpha == 0) { |
| 3579 dest_scan += 4; | 3574 dest_scan += 4; |
| 3580 continue; | 3575 continue; |
| 3581 } | 3576 } |
| 3582 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 3577 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 3583 dest_scan[3] = dest_alpha; | 3578 dest_scan[3] = dest_alpha; |
| 3584 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3579 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3585 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3580 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3586 int blended_colors[3]; | 3581 int blended_colors[3]; |
| 3587 uint8_t src_scan[3]; | 3582 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 3588 uint8_t dest_scan_o[3]; | 3583 static_cast<uint8_t>(src_g), |
| 3589 src_scan[0] = src_b; | 3584 static_cast<uint8_t>(src_r)}; |
| 3590 src_scan[1] = src_g; | 3585 uint8_t dest_scan_o[3] = {dest_scan[2], dest_scan[1], dest_scan[0]}; |
| 3591 src_scan[2] = src_r; | 3586 RGB_Blend(blend_type, scan, dest_scan_o, blended_colors); |
| 3592 dest_scan_o[0] = dest_scan[2]; | |
| 3593 dest_scan_o[1] = dest_scan[1]; | |
| 3594 dest_scan_o[2] = dest_scan[0]; | |
| 3595 RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | |
| 3596 dest_scan[2] = | 3587 dest_scan[2] = |
| 3597 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio); | 3588 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio); |
| 3598 dest_scan[1] = | 3589 dest_scan[1] = |
| 3599 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio); | 3590 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio); |
| 3600 dest_scan[0] = | 3591 dest_scan[0] = |
| 3601 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio); | 3592 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio); |
| 3602 } else if (blend_type) { | 3593 } else if (blend_type) { |
| 3603 int blended = Blend(blend_type, dest_scan[2], src_b); | 3594 int blended = Blend(blend_type, dest_scan[2], src_b); |
| 3604 blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha); | 3595 blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha); |
| 3605 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio); | 3596 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3634 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 3625 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 3635 } else { | 3626 } else { |
| 3636 src_alpha = mask_alpha * src_scan[col] / 255; | 3627 src_alpha = mask_alpha * src_scan[col] / 255; |
| 3637 } | 3628 } |
| 3638 if (src_alpha == 0) { | 3629 if (src_alpha == 0) { |
| 3639 dest_scan += Bpp; | 3630 dest_scan += Bpp; |
| 3640 continue; | 3631 continue; |
| 3641 } | 3632 } |
| 3642 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3633 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3643 int blended_colors[3]; | 3634 int blended_colors[3]; |
| 3644 uint8_t src_scan[3]; | 3635 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 3645 uint8_t dest_scan_o[3]; | 3636 static_cast<uint8_t>(src_g), |
| 3646 src_scan[0] = src_b; | 3637 static_cast<uint8_t>(src_r)}; |
| 3647 src_scan[1] = src_g; | 3638 uint8_t dest_scan_o[3] = {dest_scan[2], dest_scan[1], dest_scan[0]}; |
| 3648 src_scan[2] = src_r; | 3639 RGB_Blend(blend_type, scan, dest_scan_o, blended_colors); |
| 3649 dest_scan_o[0] = dest_scan[2]; | |
| 3650 dest_scan_o[1] = dest_scan[1]; | |
| 3651 dest_scan_o[2] = dest_scan[0]; | |
| 3652 RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | |
| 3653 dest_scan[2] = | 3640 dest_scan[2] = |
| 3654 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha); | 3641 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha); |
| 3655 dest_scan[1] = | 3642 dest_scan[1] = |
| 3656 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha); | 3643 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha); |
| 3657 dest_scan[0] = | 3644 dest_scan[0] = |
| 3658 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha); | 3645 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha); |
| 3659 } else if (blend_type) { | 3646 } else if (blend_type) { |
| 3660 int blended = Blend(blend_type, dest_scan[2], src_b); | 3647 int blended = Blend(blend_type, dest_scan[2], src_b); |
| 3661 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, src_alpha); | 3648 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, src_alpha); |
| 3662 blended = Blend(blend_type, dest_scan[1], src_g); | 3649 blended = Blend(blend_type, dest_scan[1], src_g); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3708 FXARGB_SETRGBORDERDIB(dest_scan, | 3695 FXARGB_SETRGBORDERDIB(dest_scan, |
| 3709 FXARGB_MAKE(src_alpha, src_r, src_g, src_b)); | 3696 FXARGB_MAKE(src_alpha, src_r, src_g, src_b)); |
| 3710 dest_scan += 4; | 3697 dest_scan += 4; |
| 3711 continue; | 3698 continue; |
| 3712 } | 3699 } |
| 3713 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 3700 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 3714 dest_scan[3] = dest_alpha; | 3701 dest_scan[3] = dest_alpha; |
| 3715 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3702 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3716 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3703 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3717 int blended_colors[3]; | 3704 int blended_colors[3]; |
| 3718 uint8_t src_scan[3]; | 3705 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 3719 uint8_t dest_scan_o[3]; | 3706 static_cast<uint8_t>(src_g), |
| 3720 src_scan[0] = src_b; | 3707 static_cast<uint8_t>(src_r)}; |
| 3721 src_scan[1] = src_g; | 3708 uint8_t dest_scan_o[3] = {dest_scan[2], dest_scan[1], dest_scan[0]}; |
| 3722 src_scan[2] = src_r; | 3709 RGB_Blend(blend_type, scan, dest_scan_o, blended_colors); |
| 3723 dest_scan_o[0] = dest_scan[2]; | |
| 3724 dest_scan_o[1] = dest_scan[1]; | |
| 3725 dest_scan_o[2] = dest_scan[0]; | |
| 3726 RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | |
| 3727 dest_scan[2] = | 3710 dest_scan[2] = |
| 3728 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio); | 3711 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio); |
| 3729 dest_scan[1] = | 3712 dest_scan[1] = |
| 3730 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio); | 3713 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio); |
| 3731 dest_scan[0] = | 3714 dest_scan[0] = |
| 3732 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio); | 3715 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio); |
| 3733 } else if (blend_type) { | 3716 } else if (blend_type) { |
| 3734 int blended = Blend(blend_type, dest_scan[2], src_b); | 3717 int blended = Blend(blend_type, dest_scan[2], src_b); |
| 3735 blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha); | 3718 blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha); |
| 3736 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio); | 3719 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3781 src_alpha = mask_alpha * clip_scan[col] / 255; | 3764 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 3782 } else { | 3765 } else { |
| 3783 src_alpha = mask_alpha; | 3766 src_alpha = mask_alpha; |
| 3784 } | 3767 } |
| 3785 if (src_alpha == 0) { | 3768 if (src_alpha == 0) { |
| 3786 dest_scan += Bpp; | 3769 dest_scan += Bpp; |
| 3787 continue; | 3770 continue; |
| 3788 } | 3771 } |
| 3789 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3772 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3790 int blended_colors[3]; | 3773 int blended_colors[3]; |
| 3791 uint8_t src_scan[3]; | 3774 uint8_t scan[3] = {static_cast<uint8_t>(src_b), |
| 3792 uint8_t dest_scan_o[3]; | 3775 static_cast<uint8_t>(src_g), |
| 3793 src_scan[0] = src_b; | 3776 static_cast<uint8_t>(src_r)}; |
| 3794 src_scan[1] = src_g; | 3777 uint8_t dest_scan_o[3] = {dest_scan[2], dest_scan[1], dest_scan[0]}; |
| 3795 src_scan[2] = src_r; | 3778 RGB_Blend(blend_type, scan, dest_scan_o, blended_colors); |
| 3796 dest_scan_o[0] = dest_scan[2]; | |
| 3797 dest_scan_o[1] = dest_scan[1]; | |
| 3798 dest_scan_o[2] = dest_scan[0]; | |
| 3799 RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | |
| 3800 dest_scan[2] = | 3779 dest_scan[2] = |
| 3801 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha); | 3780 FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha); |
| 3802 dest_scan[1] = | 3781 dest_scan[1] = |
| 3803 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha); | 3782 FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha); |
| 3804 dest_scan[0] = | 3783 dest_scan[0] = |
| 3805 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha); | 3784 FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha); |
| 3806 } else if (blend_type) { | 3785 } else if (blend_type) { |
| 3807 int back_color = dest_scan[2]; | 3786 int back_color = dest_scan[2]; |
| 3808 int blended = Blend(blend_type, back_color, src_b); | 3787 int blended = Blend(blend_type, back_color, src_b); |
| 3809 dest_scan[2] = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); | 3788 dest_scan[2] = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); |
| (...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4703 dest_scan++; | 4682 dest_scan++; |
| 4704 } | 4683 } |
| 4705 } | 4684 } |
| 4706 } | 4685 } |
| 4707 return TRUE; | 4686 return TRUE; |
| 4708 } | 4687 } |
| 4709 if (m_bpp == 1) { | 4688 if (m_bpp == 1) { |
| 4710 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); | 4689 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); |
| 4711 int left_shift = rect.left % 8; | 4690 int left_shift = rect.left % 8; |
| 4712 int right_shift = rect.right % 8; | 4691 int right_shift = rect.right % 8; |
| 4713 int width = rect.right / 8 - rect.left / 8; | 4692 int new_width = rect.right / 8 - rect.left / 8; |
| 4714 int index = 0; | 4693 int index = 0; |
| 4715 if (m_pPalette) { | 4694 if (m_pPalette) { |
| 4716 for (int i = 0; i < 2; i++) { | 4695 for (int i = 0; i < 2; i++) { |
| 4717 if (m_pPalette[i] == color) { | 4696 if (m_pPalette[i] == color) { |
| 4718 index = i; | 4697 index = i; |
| 4719 } | 4698 } |
| 4720 } | 4699 } |
| 4721 } else { | 4700 } else { |
| 4722 index = ((uint8_t)color == 0xff) ? 1 : 0; | 4701 index = ((uint8_t)color == 0xff) ? 1 : 0; |
| 4723 } | 4702 } |
| 4724 for (int row = rect.top; row < rect.bottom; row++) { | 4703 for (int row = rect.top; row < rect.bottom; row++) { |
| 4725 uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8; | 4704 uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8; |
| 4726 uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right / 8; | 4705 uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right / 8; |
| 4727 uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift)); | 4706 uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift)); |
| 4728 uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift); | 4707 uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift); |
| 4729 if (width) { | 4708 if (new_width) { |
| 4730 FXSYS_memset(dest_scan_top + 1, index ? 255 : 0, width - 1); | 4709 FXSYS_memset(dest_scan_top + 1, index ? 255 : 0, new_width - 1); |
| 4731 if (!index) { | 4710 if (!index) { |
| 4732 *dest_scan_top &= left_flag; | 4711 *dest_scan_top &= left_flag; |
| 4733 *dest_scan_top_r &= right_flag; | 4712 *dest_scan_top_r &= right_flag; |
| 4734 } else { | 4713 } else { |
| 4735 *dest_scan_top |= ~left_flag; | 4714 *dest_scan_top |= ~left_flag; |
| 4736 *dest_scan_top_r |= ~right_flag; | 4715 *dest_scan_top_r |= ~right_flag; |
| 4737 } | 4716 } |
| 4738 } else { | 4717 } else { |
| 4739 if (!index) { | 4718 if (!index) { |
| 4740 *dest_scan_top &= left_flag | right_flag; | 4719 *dest_scan_top &= left_flag | right_flag; |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5050 } | 5029 } |
| 5051 src_alpha_scan = m_pScanlineAlphaV; | 5030 src_alpha_scan = m_pScanlineAlphaV; |
| 5052 dest_alpha_scan = dest_alpha_buf; | 5031 dest_alpha_scan = dest_alpha_buf; |
| 5053 if (dest_alpha_scan) { | 5032 if (dest_alpha_scan) { |
| 5054 for (i = 0; i < m_DestHeight; i++) { | 5033 for (i = 0; i < m_DestHeight; i++) { |
| 5055 *dest_alpha_scan = *src_alpha_scan++; | 5034 *dest_alpha_scan = *src_alpha_scan++; |
| 5056 dest_alpha_scan += y_alpha_step; | 5035 dest_alpha_scan += y_alpha_step; |
| 5057 } | 5036 } |
| 5058 } | 5037 } |
| 5059 } | 5038 } |
| OLD | NEW |