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

问题描述 投票:0回答:1

我想用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

c# image-processing asp.net-core
1个回答
0
投票

弄清楚如何使用填充和适当的颜色创建蒙太奇。无法使用.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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.