我想用Magick.net创建一个图像拼贴画。我正在使用MagickImageCollection和.Mosaic()。我已经尝试了MagickImageCollection提供的一些功能,但所有这些功能都会增加最终图像的亮度。到目前为止唯一一个工作的是.Montage(),但是使用.Montage()我没有得到正确的填充。
我如何配置它,.Mosaic()保持单个图像中的颜色?
using (var collection = new MagickImageCollection())
{
for (var i = 0; i < thumbnailCount; i++)
{
var image = new MagickImage(TempThumbPathFor(i));
image.Resize(256, 0);
var posX = (image.Page.Width + margin) * (i % 2);
var posY = (image.Page.Height + margin) * (i / 2);
image.Page = new MagickGeometry(posX, posY, new Percentage(100), new Percentage(100));
collection.Add(image);
}
using (var result = collection.Mosaic())
{
result.Write(newPath);
}
}
有关问题首先出现的原因,请查看此问题:GitHub
弄清楚如何使用填充和适当的颜色创建蒙太奇。无法使用.Mosaic,但使用.Montage()。
重要的是将边距添加到X,Y,高度和宽度,并在最终图像上调用.Trim()。你很可能不得不在边缘上玩一点,以在图像之间获得平衡的填充,但除此之外它的效果非常好。
const int margin = 2;
MagickGeometry geometry = null;
using (var collection = new MagickImageCollection())
{
for (var i = 0; i < thumbnailCount; i++)
{
var image = new MagickImage(TempThumbPathFor(i));
image.Resize(256, 0);
collection.Add(image);
if (i == 0)
{
geometry = image.BoundingBox;
geometry.X += margin;
geometry.Width += margin;
geometry.Y += margin;
geometry.Height += margin - 1;
}
}
using (var result = collection.Montage(new MontageSettings()
{
Geometry = geometry,
BackgroundColor = MagickColor.FromRgb(255, 255, 255)
}))
{
result.Trim();
result.Write(newPath);
}
}