我正在尝试使用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
答案 0 :(得分:0)
弄清楚如何创建带有填充和适当颜色的蒙太奇。无法使其与 .Mosaic 一起使用,但不能与 .Montage()一起使用。
重要的部分是在X,Y,Height和Width上添加边距,并在最终图像上调用 .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);
}
}