case MultiplyCompositeOp:
case NoCompositeOp:
case OutCompositeOp:
-// case OverCompositeOp:
+ case OverCompositeOp:
case OverlayCompositeOp:
case PegtopLightCompositeOp:
case PinLightCompositeOp:
channel;
PixelTrait
+ composite_traits,
traits;
channel=GetPixelChannelMapChannel(image,i);
traits=GetPixelChannelMapTraits(image,channel);
- if (traits == UndefinedPixelTrait)
+ composite_traits=GetPixelChannelMapTraits(composite_image,
+ channel);
+ if ((traits == UndefinedPixelTrait) ||
+ (composite_traits == UndefinedPixelTrait))
continue;
switch (compose)
{
/*
Set alpha channel.
*/
- pixel=0.0;
switch (compose)
{
case AtopCompositeOp:
default:
break;
}
- gamma=QuantumRange/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
- pixel=0.0;
+ gamma=1.0/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
switch (compose)
{
case AtopCompositeOp:
}
case ColorDodgeCompositeOp:
{
- if ((fabs((Sa*Sc)-Sa) < MagickEpsilon) &&
- (fabs((Da*Dc)) < MagickEpsilon))
+ if ((fabs(Sca-Sa) < MagickEpsilon) && (fabs(Dca) < MagickEpsilon))
{
- pixel=gamma*((Sa*Sc)*(1.0-Da)+(Da*Dc)*(1.0-Sa));
+ pixel=gamma*QuantumRange*(Sca*(1.0-Da)+Dca*(1.0-Sa));
break;
}
- if (fabs((Sa*Sc)-Sa) < MagickEpsilon)
+ if (fabs(Sca-Sa) < MagickEpsilon)
{
- pixel=gamma*(Sa*Da+(Sa*Sc)*(1.0-Da)+(Da*Dc)*(1.0-Sa));
+ pixel=gamma*QuantumRange*(Sa*Da+Sca*(1.0-Da)+Dca*(1.0-Sa));
break;
}
- pixel=gamma*((Da*Dc)*Sa*Sa/(Sa-(Sa*Sc))+(Sa*Sc)*(1.0-Da)+(Da*Dc)*
+ pixel=gamma*QuantumRange*(Dca*Sa*Sa/(Sa-Sca)+Sca*(1.0-Da)+Dca*
(1.0-Sa));
break;
}
case HardLightCompositeOp:
{
if ((2.0*Sca) < Sa)
- pixel=gamma*(2.0*Sca*Dca+Sca*(1.0-Da)+Dca*(1.0-Sa));
- pixel=gamma*(Sa*Da-2.0*(Da-Dca)*(Sa-Sca)+Sca*(1.0-Da)+
- Dca*(1.0-Sa));
+ {
+ pixel=gamma*QuantumRange*(2.0*Sca*Dca+Sca*(1.0-Da)+Dca*
+ (1.0-Sa));
+ break;
+ }
+ pixel=gamma*QuantumRange*(Sa*Da-2.0*(Da-Dca)*(Sa-Sca)+Sca*
+ (1.0-Da)+Dca*(1.0-Sa));
break;
}
case InCompositeOp:
}
case MultiplyCompositeOp:
{
- pixel=gamma*(Sca*Dca+Sca*(1.0-Da)+Dca*(1.0-Sa));
+ pixel=gamma*QuantumRange*(Sca*Dca+Sca*(1.0-Da)+Dca*(1.0-Sa));
break;
}
case OutCompositeOp:
}
case ScreenCompositeOp:
{
- pixel=gamma*((Sa*Sc)+(Da*Dc)-(Sa*Sc)*(Da*Dc));
+ pixel=gamma*QuantumRange*(Sca+Dca-Sca*Dca);
break;
}
case SoftLightCompositeOp:
break;
}
default:
+ {
+ pixel=Sc;
break;
+ }
}
q[i]=ClampToQuantum(pixel);
}