c# - 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 中执行
解决方案
下面的代码可以帮助您:
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
推荐阅读
- java - 为什么线程“AWT-EventQueue-0”java.lang.Error 发生异常?
- android - 移动子视图和父视图也应该滚动
- arrays - Bash数组问题:如何将目录中的文件添加到shell脚本中的数组中
- javascript - Javascript Sim 树搜索功能
- rust - 如何在 Rust 中从本地时区转换为 UTC
- julia - 一个张量中的矩阵和Julia中的另一个张量的爱因斯坦求和
- python - 如何在python函数中有效地查询impala SQL
- c# - 实体与身份用户关联时,实体框架核心 3.2 更新失败
- amazon-web-services - 无法从 vpc 内的 Lamba 连接 DynamoDB VPC 终端节点
- python - 使用 OpenCV 特征工具进行实时椭球检测