Changeset 6238
- Timestamp:
- 12/21/11 10:24:39 (17 months ago)
- File:
-
- 1 edited
-
ImageMagick/trunk/MagickCore/composite.c (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ImageMagick/trunk/MagickCore/composite.c
r6235 r6238 2223 2223 case AtopCompositeOp: 2224 2224 case ClearCompositeOp: 2225 case ColorBurnCompositeOp: 2225 2226 case ColorDodgeCompositeOp: 2226 2227 case CopyCompositeOp: … … 2236 2237 case DstOutCompositeOp: 2237 2238 case ExclusionCompositeOp: 2239 case HardLightCompositeOp: 2238 2240 case InCompositeOp: 2239 2241 case LightenCompositeOp: 2240 2242 case LightenIntensityCompositeOp: 2243 case LinearBurnCompositeOp: 2244 case LinearDodgeCompositeOp: 2245 case LinearLightCompositeOp: 2241 2246 case MathematicsCompositeOp: 2242 2247 case MinusDstCompositeOp: … … 2248 2253 case OutCompositeOp: 2249 2254 case OverCompositeOp: 2255 case OverlayCompositeOp: 2256 case PegtopLightCompositeOp: 2257 case PinLightCompositeOp: 2250 2258 case PlusCompositeOp: 2251 2259 case ReplaceCompositeOp: 2252 2260 case ScreenCompositeOp: 2261 case SoftLightCompositeOp: 2253 2262 case SrcAtopCompositeOp: 2254 2263 case SrcCompositeOp: … … 2256 2265 case SrcOutCompositeOp: 2257 2266 case SrcOverCompositeOp: 2267 case VividLightCompositeOp: 2258 2268 case XorCompositeOp: 2259 2269 { … … 2269 2279 Da, 2270 2280 Dc, 2281 Dca, 2271 2282 gamma, 2272 2283 Sa, 2273 Sc; 2284 Sc, 2285 Sca; 2274 2286 2275 2287 register ssize_t … … 2340 2352 /* 2341 2353 Authentic composite: 2342 Sa: source normalizedalpha.2343 Da: destination normalizedalpha.2354 Sa: normalized source alpha. 2355 Da: normalized destination alpha. 2344 2356 */ 2345 2357 Sa=QuantumScale*GetPixelAlpha(composite_image,p); … … 2357 2369 break; 2358 2370 } 2371 case ColorBurnCompositeOp: 2359 2372 case ColorDodgeCompositeOp: 2360 2373 case DifferenceCompositeOp: … … 2362 2375 case DivideSrcCompositeOp: 2363 2376 case ExclusionCompositeOp: 2377 case HardLightCompositeOp: 2378 case LinearBurnCompositeOp: 2379 case LinearDodgeCompositeOp: 2380 case LinearLightCompositeOp: 2364 2381 case MathematicsCompositeOp: 2365 2382 case MinusDstCompositeOp: … … 2368 2385 case ModulusSubtractCompositeOp: 2369 2386 case MultiplyCompositeOp: 2387 case OverlayCompositeOp: 2388 case PegtopLightCompositeOp: 2389 case PinLightCompositeOp: 2370 2390 case ScreenCompositeOp: 2391 case SoftLightCompositeOp: 2392 case VividLightCompositeOp: 2371 2393 { 2372 2394 alpha=RoundToUnity(Sa+Da-Sa*Da); … … 2431 2453 /* 2432 2454 Sc: source color. 2455 Sca: source normalized color multiplied by alpha. 2433 2456 Dc: destination color. 2457 Dca: normalized destination color multiplied by alpha. 2434 2458 */ 2435 2459 Sc=(MagickRealType) GetPixelChannel(composite_image,channel,p); 2460 Sca=QuantumScale*Sa*Sc; 2436 2461 Dc=(MagickRealType) q[i]; 2462 Dca=QuantumScale*Da*Dc; 2437 2463 if ((traits & CopyPixelTrait) != 0) 2438 2464 { … … 2512 2538 break; 2513 2539 } 2540 case ColorBurnCompositeOp: 2541 { 2542 if ((fabs(Sca) < MagickEpsilon) && (fabs(Dca-Da) < MagickEpsilon)) 2543 { 2544 pixel=gamma*(Sa*Da+Dca*(1.0-Sa)); 2545 break; 2546 } 2547 if (Sca < MagickEpsilon) 2548 { 2549 pixel=gamma*(Dca*(1.0-Sa)); 2550 break; 2551 } 2552 pixel=gamma*(Sa*Da-Sa*MagickMin(Da,(Da-Dca)*Sa/Sca)+Sca*(1.0-Da)+ 2553 Dca*(1.0-Sa)); 2554 break; 2555 } 2514 2556 case ColorDodgeCompositeOp: 2515 2557 { … … 2559 2601 case DivideDstCompositeOp: 2560 2602 { 2561 if ((fabs((QuantumScale*Sa*Sc)) < MagickEpsilon) && 2562 (fabs((QuantumScale*Da*Dc)) < MagickEpsilon)) 2603 if ((fabs(Sca) < MagickEpsilon) && (fabs(Dca) < MagickEpsilon)) 2563 2604 { 2564 pixel=gamma*((QuantumScale*Sa*Sc)*(1.0-Da)+ 2565 (QuantumScale*Da*Dc)*(1.0-Sa)); 2605 pixel=gamma*(Sca*(1.0-Da)+Dca*(1.0-Sa)); 2566 2606 break; 2567 2607 } 2568 if (fabs( (QuantumScale*Da*Dc)) < MagickEpsilon)2608 if (fabs(Dca) < MagickEpsilon) 2569 2609 { 2570 pixel=gamma*(Sa*Da+(QuantumScale*Sa*Sc)*(1.0-Da)+ 2571 (QuantumScale*Da*Dc)*(1.0-Sa)); 2610 pixel=gamma*(Sa*Da+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2572 2611 break; 2573 2612 } 2574 pixel=gamma*((QuantumScale*Sa*Sc)*Da*Da/(QuantumScale*Da*Dc)+ 2575 (QuantumScale*Sa*Sc)*(1.0-Da)+(QuantumScale*Da*Dc)*(1.0-Sa)); 2613 pixel=gamma*(Sca*Da*Da/Dca+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2576 2614 break; 2577 2615 } 2578 2616 case DivideSrcCompositeOp: 2579 2617 { 2580 if ((fabs((QuantumScale*Da*Dc)) < MagickEpsilon) && 2581 (fabs((QuantumScale*Sa*Sc)) < MagickEpsilon)) 2618 if ((fabs(Dca) < MagickEpsilon) && (fabs(Sca) < MagickEpsilon)) 2582 2619 { 2583 pixel=gamma*((QuantumScale*Da*Dc)*(1.0-Sa)+ 2584 (QuantumScale*Sa*Sc)*(1.0-Da)); 2620 pixel=gamma*(Dca*(1.0-Sa)+Sca*(1.0-Da)); 2585 2621 break; 2586 2622 } 2587 if (fabs( (QuantumScale*Sa*Sc)) < MagickEpsilon)2623 if (fabs(Sca) < MagickEpsilon) 2588 2624 { 2589 pixel=gamma*(Da*Sa+(QuantumScale*Da*Dc)*(1.0-Sa)+ 2590 (QuantumScale*Sa*Sc)*(1.0-Da)); 2625 pixel=gamma*(Da*Sa+Dca*(1.0-Sa)+Sca*(1.0-Da)); 2591 2626 break; 2592 2627 } 2593 pixel=gamma*((QuantumScale*Da*Dc)*Sa*Sa/(QuantumScale*Sa*Sc)+ 2594 (QuantumScale*Da*Dc)*(1.0-Sa)+(QuantumScale*Sa*Sc)*(1.0-Da)); 2628 pixel=gamma*(Dca*Sa*Sa/Sca+Dca*(1.0-Sa)+Sca*(1.0-Da)); 2595 2629 break; 2596 2630 } … … 2623 2657 case ExclusionCompositeOp: 2624 2658 { 2625 pixel=gamma*((QuantumScale*Sa*Sc)*Da+(QuantumScale*Da*Dc)*Sa-2.0* 2626 (QuantumScale*Sa*Sc)*(QuantumScale*Da*Dc)+(QuantumScale*Sa*Sc)* 2627 (1.0-Da)+(QuantumScale*Da*Dc)*(1.0-Sa)); 2659 pixel=gamma*(Sca*Da+Dca*Sa-2.0*Sca*Dca+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2660 break; 2661 } 2662 case HardLightCompositeOp: 2663 { 2664 if ((2.0*Sca) < Sa) 2665 pixel=gamma*(2.0*Sca*Dca+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2666 pixel=gamma*(Sa*Da-2.0*(Da-Dca)*(Sa-Sca)+Sca*(1.0-Da)+ 2667 Dca*(1.0-Sa)); 2628 2668 break; 2629 2669 } … … 2638 2678 pixel=Sa*GetPixelIntensity(composite_image,p) > 2639 2679 Da*GetPixelIntensity(image,q) ? Sc : Dc; 2680 break; 2681 } 2682 case LinearBurnCompositeOp: 2683 { 2684 pixel=gamma*(Sca+Dca-Sa*Da); 2685 break; 2686 } 2687 case LinearDodgeCompositeOp: 2688 { 2689 pixel=gamma*(Sa*Sc+Da*Dc); 2690 break; 2691 } 2692 case LinearLightCompositeOp: 2693 { 2694 pixel=gamma*((Sca-Sa)*Da+Sca+ 2695 Dca); 2640 2696 break; 2641 2697 } … … 2685 2741 case MultiplyCompositeOp: 2686 2742 { 2687 pixel=gamma*((QuantumScale*Sa*Sc)*(QuantumScale*Da*Dc)+ 2688 (QuantumScale*Sa*Sc)*(1.0-Da)+(QuantumScale*Da*Dc)*(1.0-Sa)); 2743 pixel=gamma*(Sca*Dca+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2689 2744 break; 2690 2745 } … … 2701 2756 break; 2702 2757 } 2758 case OverlayCompositeOp: 2759 { 2760 if ((2.0*Dca) < Da) 2761 pixel=gamma*(2.0*Dca*Sca+Dca*(1.0-Sa)+Sca*(1.0-Da)); 2762 pixel=gamma*(Da*Sa-2.0*(Sa-Sca)*(Da-Dca)+Dca*(1.0-Sa)+Sca* 2763 (1.0-Da)); 2764 break; 2765 } 2766 case PegtopLightCompositeOp: 2767 { 2768 if (fabs(Da) < MagickEpsilon) 2769 { 2770 pixel=gamma*(Sca); 2771 break; 2772 } 2773 pixel=gamma*(Dca*Dca*(Sa-2.0*Sca)/Da+Sca*(2.0*Dca+1.0-Da)+Dca* 2774 (1.0-Sa)); 2775 break; 2776 } 2777 case PinLightCompositeOp: 2778 { 2779 if ((Dca*Sa) < (Da*(2.0*Sca-Sa))) 2780 { 2781 pixel=gamma*(Sca*(Da+1.0)-Sa*Da+Dca*(1.0-Sa)); 2782 break; 2783 } 2784 if ((Dca*Sa) > (2.0*Sca*Da)) 2785 { 2786 pixel=gamma*(Sca*Da+Sca+Dca*(1.0-Sa)); 2787 break; 2788 } 2789 pixel=gamma*(Sca*(1.0-Da)+Dca); 2790 break; 2791 } 2703 2792 case PlusCompositeOp: 2704 2793 { … … 2709 2798 { 2710 2799 pixel=gamma*((Sa*Sc)+(Da*Dc)-(Sa*Sc)*(Da*Dc)); 2800 break; 2801 } 2802 case SoftLightCompositeOp: 2803 { 2804 if ((2.0*Sca) < Sa) 2805 { 2806 pixel=gamma*(Dca*(Sa+(2.0*Sca-Sa)*(1.0-(Dca/Da)))+Sca* 2807 (1.0-Da)+Dca*(1.0-Sa)); 2808 break; 2809 } 2810 if (((2.0*Sca) > Sa) && ((4.0*Dca) <= Da)) 2811 { 2812 pixel=gamma*(Dca*Sa+Da*(2.0*Sca-Sa)*(4.0*(Dca/Da)*(4.0* 2813 (Dca/Da)+1.0)*((Dca/Da)-1.0)+7.0*(Dca/Da))+Sca*(1.0-Da)+Dca* 2814 (1.0-Sa)); 2815 break; 2816 } 2817 pixel=gamma*(Dca*Sa+Da*(2.0*Sca-Sa)*(pow((Dca/Da),0.5)-(Dca/Da))+ 2818 Sca*(1.0-Da)+Dca*(1.0-Sa)); 2819 break; 2820 } 2821 case VividLightCompositeOp: 2822 { 2823 if ((fabs(Sa) < MagickEpsilon) || (fabs(Sca-Sa) < MagickEpsilon)) 2824 { 2825 pixel=gamma*(Sa*Da+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2826 break; 2827 } 2828 if ((2.0*Sca) <= Sa) 2829 { 2830 pixel=gamma*(Sa*(Da+Sa*(Dca-Da)/(2.0*Sca))+Sca*(1.0-Da)+Dca* 2831 (1.0-Sa)); 2832 break; 2833 } 2834 pixel=gamma*(Dca*Sa*Sa/(2.0*(Sa-Sca))+Sca*(1.0-Da)+Dca*(1.0-Sa)); 2711 2835 break; 2712 2836 }
Note: See TracChangeset
for help on using the changeset viewer.
