从多张图像中创建马赛克可增加最终图像的亮度

时间:2019-03-24 00:42:10

标签: c# image-processing asp.net-core

我正在尝试使用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);
    }
}

具有褪色颜色的图像拼贴: Generated Image

有关为什么首先出现问题的更多信息,请查看以下问题:GitHub

1 个答案:

答案 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);
    }
}