问题描述
我正在尝试替换使用 GDI+ 向图像添加水印的函数。具有使用 magick.net 的等效函数。
GDI+功能如下:
public void DrawImage(Image image,Rectangle sourceRect,Rectangle destRect,double opacity,bool highQuality)
{
using (var g = Graphics.FromImage(Control))
{
using (var imgAttr = new ImageAttributes())
{
if (opacity != 1.0)
{
var matrix = new float[][] {
new float[] { 1,0},new float[] { 0,1,(float)opacity,0}
};
imgAttr.SetColorMatrix(new ColorMatrix(matrix));
}
imgAttr.SetWrapMode(WrapMode.TileFlipXY);
g.CompositingMode = CompositingMode.sourceOver;
g.CompositingQuality = highQuality ? CompositingQuality.HighQuality : CompositingQuality.Default;
g.PixelOffsetMode = highQuality ? PixelOffsetMode.HighQuality : PixelOffsetMode.None;
g.SmoothingMode = highQuality ? SmoothingMode.HighQuality : SmoothingMode.None;
g.InterpolationMode = highQuality ? InterpolationMode.HighQualityBicubic : InterpolationMode.Bilinear;
g.DrawImage(image,destRect,sourceRect.X,sourceRect.Y,sourceRect.Width,sourceRect.Height,GraphicsUnit.Pixel,imgAttr);
}
}
}
到目前为止使用 magick.net 我有这样的功能:
public void DrawImage(MagickImage image,MagickGeometry sourceRect,MagickGeometry destRect,bool highQuality = false)
{
var source = image.Clone(sourceRect.X,sourceRect.Height);
destRect.IgnoreAspectRatio = true;
source.Resize(destRect);
source.Alpha(AlphaOption.Set);
source.Evaluate(Channels.Alpha,EvaluateOperator.Multiply,opacity);
_magick.Composite(source,destRect.X,destRect.Y,CompositeOperator.SrcOver);
}
当 highQuality 标志为 false 时,这两种方法会产生相同的结果。然而,当标志为真时,GDI+ 会产生一个更加不透明的水印。
有谁知道如何在 ImageMagick 中重现 CompositingQuality.HighQuality 效果?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)