首页 > 解决方案 > VB.NET 将一张图像粘贴到另一张图像中而不损失质量

问题描述

我正在尝试创建用于将 png 图像粘贴到另一个图像的中心的 VB.NET 代码。我正在使用以下代码:

'create new image with watermark
Dim backImg = Image.FromFile("image path")
Dim mrkImg = Image.FromFile("watermark.png")
Dim g = Graphics.FromImage(backImg)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
Dim x = Convert.ToSingle((backImg.Width / 2) - (mrkImg.Width / 2))
Dim y = Convert.ToSingle((backImg.Height / 2) - (mrkImg.Height / 2))
g.DrawImage(mrkImg, x, y)
backImg.Save("result.jpg")

这是有效的,但我注意到质量下降:

在此处输入图像描述

(蓝色的是实际图像,红色的是 png 的一部分。注意边缘。)

我怎样才能保持完整的质量?我已经在 python 中实现了相同的功能而没有失去任何质量但不确定如何在 VB.NET 中执行

标签: c#vb.netgraphicsbitmap

解决方案


下面的代码可以帮助您:

 Using backImg As Bitmap = New Bitmap(Bitmap.FromFile("C:\Users\User\Desktop\test1.png"))

        Using mrkImg = Image.FromFile("C:\Users\User\Desktop\test2.png")
            Using final As Bitmap = New Bitmap(backImg.Width, backImg.Height)

                final.SetResolution(CSng(backImg.HorizontalResolution),
                                    CSng(backImg.VerticalResolution))

                Using g = Graphics.FromImage(final)

                    g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
                    g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
                    g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic

                    g.DrawImage(backImg, 0, 0)
                    g.DrawImage(mrkImg,
                                CSng((backImg.Width - mrkImg.Width) * 0.5),
                                CSng((backImg.Height - mrkImg.Height) * 0.5))
                End Using

                final.Save("C:\Users\User\Desktop\testResult.jpg")

            End Using

        End Using
End Using

推荐阅读