使用特定的Alpha透明度级别将图像放在C#中的图像上

时间:2015-10-22 15:30:40

标签: c# image transparency alpha

我希望能够在图像上放置图像,但为叠加图像应用特定级别的透明度。

这是我到目前为止所做的:

    private static Image PlaceImageOverImage(Image background, Image overlay, int x, int y, int alpha)
    {
        using (Graphics graphics = Graphics.FromImage(background))
        {
            graphics.CompositingMode = CompositingMode.SourceOver;
            graphics.DrawImage(overlay, new Point(x, y));
        }

        return background;
    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用ColorMatrix:

private static Image PlaceImageOverImage(Image background, Image overlay, int x, int y, float alpha)
{
    using (Graphics graphics = Graphics.FromImage(background))
    {
        var cm = new ColorMatrix();
        cm.Matrix33 = alpha;

        var ia = new ImageAttributes();
        ia.SetColorMatrix(cm);

        graphics.DrawImage(
            overlay, 
            // target
            new Rectangle(x, y, overlay.Width, overlay.Height), 
            // source
            0, 0, overlay.Width, overlay.Height, 
            GraphicsUnit.Pixel, 
            ia);
    }

    return background;
}

警告:alpha是一个浮点数(0 ... 1)

PS:我宁愿创建一个新的Bitmap并将其返回,而不是改变现有的Bitmap。 (并返回)>>> 它关于函数式编程。