如何摆脱jpg的像素化边缘?

时间:2017-11-02 18:22:59

标签: vb.net image-processing bitmap transparency

对于我的学生项目,我有一个vb.net代码片段,从网站下载jpg文件,然后设置所有像素,几乎是白色的,完全是白色的:

Dim oColor As Color
Dim bRed As Byte
Dim bGreen As Byte
Dim bBlue As Byte

Dim imgTemp As Image = Image.FromFile("C:\DownloadedImage.jpg")
Dim bmpTemp As New Bitmap(imgTemp.Width, imgTemp.Height, Imaging.PixelFormat.Format32bppArgb)

Using gfx As Graphics = Graphics.FromImage(bmpTemp)
    gfx.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    gfx.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
    gfx.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
    gfx.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
    gfx.DrawImage(imgTemp, 0, 0)
End Using

For x = 0 To bmpTemp.Width - 1
    For y = 0 To bmpTemp.Height - 1

       oColor = bmpTemp.GetPixel(x, y)
       bRed = oColor.R
       bGreen = oColor.G
       bBlue = oColor.B

       If bRed <= 254 AndAlso bRed >= 254 - 20 Then '20 = White Tolerance'
          bmpTemp.SetPixel(x, y, Color.White)
       End If

       If bGreen <= 254 AndAlso bGreen >= 254 - 20 Then
          bmpTemp.SetPixel(x, y, Color.White)
       End If

       If bBlue <= 254 AndAlso bBlue >= 254 - 20 Then
          bmpTemp.SetPixel(x, y, Color.White)
       End If

    Next
Next

Dim newForm As New Form With {.BackgroundImage = bmpTemp, .TransparencyKey = Color.White, .BackgroundImageLayout = ImageLayout.Zoom, .BackColor = Color.White}

newForm.Show()

然后将以这种方式创建的位图设置为其TransparencyKey属性为白色的表单的BackgroundImage。结果不是完全失败,但孤立对象的边缘仍然是白色和像素化:

The result in two different sizes (left) and what I'm trying to achieve (right)

我现在正在寻找一种摆脱那些参差不齐的边缘的方法,比如Photoshop的“优化边缘”功能。

非常感谢提前!

0 个答案:

没有答案