【发布时间】:2014-01-06 19:22:30
【问题描述】:
大家好,我正在尝试通过使用蒙版来使我的图像看起来漂亮和平滑(抗锯齿),以便制作如下所示的圆形图像:
原图如下:
上图的蒙版是这样的(红色是要取出的蒙版颜色):
它有效,但它给了我那些不太好的锯齿状边缘。掩码是 .png,图像本身也是 .png。
我用来制作面具的代码是这样的:
picNextTopic1.Image = Image.FromStream(wc.OpenRead(anAPI.wallOrgPostImage(keying).Replace("{width}", "50").Replace("{height}", "50"))) 'Download the image from the website.
picNextTopic1.Image = ApplyMask(New Bitmap(picNextTopic1.Image), New Bitmap(My.Resources.mask), Color.Red) 'Apply mask to the downloaded image above.
ApplyMask 函数是这样的:
Public Function ApplyMask(ByVal bImg As Bitmap, ByVal bMask As Bitmap, ByVal maskColor As Color) As Image
Dim wImg As Integer = bImg.Width
Dim hImg As Integer = bImg.Height
Dim wMask As Integer = bMask.Width
Dim hMask As Integer = bMask.Height
Dim intMask As Integer = maskColor.ToArgb
Dim intTransparent As Integer = Color.Transparent.ToArgb
Using fpImg As New FastPix(bImg)
Using fpMask As New FastPix(bMask)
Dim pixelsImg = fpImg.PixelArray
Dim pixelsMask = fpMask.PixelArray
For y As Integer = 0 To Math.Min(hImg, hMask) - 1
For x As Integer = 0 To Math.Min(wImg, wMask) - 1
Dim iImg As Integer = (y * wImg) + x
Dim iMask As Integer = (y * wMask) + x
If pixelsMask(iMask) = intMask Then
pixelsImg(iImg) = intTransparent
End If
Next
Next
End Using
End Using
Return bImg
End Function
使用 FastPix 发现 here。
任何帮助解决这个问题都会很棒!谢谢!
更新 我拥有的透明表单代码:
Public Sub InitializeMyForm()
BackColor = Color.Plum
TransparencyKey = BackColor
End Sub
【问题讨论】:
-
您可以制作一个 alpha 蒙版,而不是二进制蒙版,它在未蒙版和蒙版之间具有平滑过渡。
标签: vb.net image mask antialiasing