Changeset 6238


Ignore:
Timestamp:
12/21/11 10:24:39 (17 months ago)
Author:
cristy
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ImageMagick/trunk/MagickCore/composite.c

    r6235 r6238  
    22232223        case AtopCompositeOp: 
    22242224        case ClearCompositeOp: 
     2225        case ColorBurnCompositeOp: 
    22252226        case ColorDodgeCompositeOp: 
    22262227        case CopyCompositeOp: 
     
    22362237        case DstOutCompositeOp: 
    22372238        case ExclusionCompositeOp: 
     2239        case HardLightCompositeOp: 
    22382240        case InCompositeOp: 
    22392241        case LightenCompositeOp: 
    22402242        case LightenIntensityCompositeOp: 
     2243        case LinearBurnCompositeOp: 
     2244        case LinearDodgeCompositeOp: 
     2245        case LinearLightCompositeOp: 
    22412246        case MathematicsCompositeOp: 
    22422247        case MinusDstCompositeOp: 
     
    22482253        case OutCompositeOp: 
    22492254        case OverCompositeOp: 
     2255        case OverlayCompositeOp: 
     2256        case PegtopLightCompositeOp: 
     2257        case PinLightCompositeOp: 
    22502258        case PlusCompositeOp: 
    22512259        case ReplaceCompositeOp: 
    22522260        case ScreenCompositeOp: 
     2261        case SoftLightCompositeOp: 
    22532262        case SrcAtopCompositeOp: 
    22542263        case SrcCompositeOp: 
     
    22562265        case SrcOutCompositeOp: 
    22572266        case SrcOverCompositeOp: 
     2267        case VividLightCompositeOp: 
    22582268        case XorCompositeOp: 
    22592269        { 
     
    22692279          Da, 
    22702280          Dc, 
     2281          Dca, 
    22712282          gamma, 
    22722283          Sa, 
    2273           Sc; 
     2284          Sc, 
     2285          Sca; 
    22742286 
    22752287        register ssize_t 
     
    23402352        /* 
    23412353          Authentic composite: 
    2342             Sa: source normalized alpha. 
    2343             Da: destination normalized alpha. 
     2354            Sa:  normalized source alpha. 
     2355            Da:  normalized destination alpha. 
    23442356        */ 
    23452357        Sa=QuantumScale*GetPixelAlpha(composite_image,p); 
     
    23572369            break; 
    23582370          } 
     2371          case ColorBurnCompositeOp: 
    23592372          case ColorDodgeCompositeOp: 
    23602373          case DifferenceCompositeOp: 
     
    23622375          case DivideSrcCompositeOp: 
    23632376          case ExclusionCompositeOp: 
     2377          case HardLightCompositeOp: 
     2378          case LinearBurnCompositeOp: 
     2379          case LinearDodgeCompositeOp: 
     2380          case LinearLightCompositeOp: 
    23642381          case MathematicsCompositeOp: 
    23652382          case MinusDstCompositeOp: 
     
    23682385          case ModulusSubtractCompositeOp: 
    23692386          case MultiplyCompositeOp: 
     2387          case OverlayCompositeOp: 
     2388          case PegtopLightCompositeOp: 
     2389          case PinLightCompositeOp: 
    23702390          case ScreenCompositeOp: 
     2391          case SoftLightCompositeOp: 
     2392          case VividLightCompositeOp: 
    23712393          { 
    23722394            alpha=RoundToUnity(Sa+Da-Sa*Da); 
     
    24312453          /* 
    24322454            Sc: source color. 
     2455            Sca: source normalized color multiplied by alpha. 
    24332456            Dc: destination color. 
     2457            Dca: normalized destination color multiplied by alpha. 
    24342458          */ 
    24352459          Sc=(MagickRealType) GetPixelChannel(composite_image,channel,p); 
     2460          Sca=QuantumScale*Sa*Sc; 
    24362461          Dc=(MagickRealType) q[i]; 
     2462          Dca=QuantumScale*Da*Dc; 
    24372463          if ((traits & CopyPixelTrait) != 0) 
    24382464            { 
     
    25122538              break; 
    25132539            } 
     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            } 
    25142556            case ColorDodgeCompositeOp: 
    25152557            { 
     
    25592601            case DivideDstCompositeOp: 
    25602602            { 
    2561               if ((fabs((QuantumScale*Sa*Sc)) < MagickEpsilon) && 
    2562                   (fabs((QuantumScale*Da*Dc)) < MagickEpsilon)) 
     2603              if ((fabs(Sca) < MagickEpsilon) && (fabs(Dca) < MagickEpsilon)) 
    25632604                { 
    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)); 
    25662606                  break; 
    25672607                } 
    2568               if (fabs((QuantumScale*Da*Dc)) < MagickEpsilon) 
     2608              if (fabs(Dca) < MagickEpsilon) 
    25692609                { 
    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)); 
    25722611                  break; 
    25732612                } 
    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)); 
    25762614              break; 
    25772615            } 
    25782616            case DivideSrcCompositeOp: 
    25792617            { 
    2580               if ((fabs((QuantumScale*Da*Dc)) < MagickEpsilon) && 
    2581                   (fabs((QuantumScale*Sa*Sc)) < MagickEpsilon)) 
     2618              if ((fabs(Dca) < MagickEpsilon) && (fabs(Sca) < MagickEpsilon)) 
    25822619                { 
    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)); 
    25852621                  break; 
    25862622                } 
    2587               if (fabs((QuantumScale*Sa*Sc)) < MagickEpsilon) 
     2623              if (fabs(Sca) < MagickEpsilon) 
    25882624                { 
    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)); 
    25912626                  break; 
    25922627                } 
    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)); 
    25952629              break; 
    25962630            } 
     
    26232657            case ExclusionCompositeOp: 
    26242658            { 
    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)); 
    26282668              break; 
    26292669            } 
     
    26382678              pixel=Sa*GetPixelIntensity(composite_image,p) > 
    26392679                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); 
    26402696              break; 
    26412697            } 
     
    26852741            case MultiplyCompositeOp: 
    26862742            { 
    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)); 
    26892744              break; 
    26902745            } 
     
    27012756              break; 
    27022757            } 
     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            } 
    27032792            case PlusCompositeOp: 
    27042793            { 
     
    27092798            { 
    27102799              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)); 
    27112835              break; 
    27122836            } 
Note: See TracChangeset for help on using the changeset viewer.