以下代码是将黑色字体周围的一个像素更改为透明的示例。扩展代码以考虑多个像素应该很容易。如果您的图像不是如示例代码中所示的文本字符串那样的矩形,则此代码可以正常工作。即使将字体颜色设置为黑色,也有一些像素不是纯黑色,它们有一些阴影,因此在我的示例中,我检查红色分量是否为255以说明灰色阴影。
Dim bmp As New Bitmap(width, height)
Dim g As Graphics = Graphics.FromImage(bmp)
Dim rand As New Random
Dim bgcolor As Color = Color.Red
g.Clear(bgcolor)
Dim FontText As Font = New Font("Arial", 42, FontStyle.Regular)
Dim textBrush As Brush = New SolidBrush(Color.Black)
g.DrawString("Teste", FontText, textBrush, 7, 16)
For i As Integer = 0 To Width - 1
For j As Integer = 0 To Height - 1
If bmp.GetPixel(i, j).R < 255 Then
If (bmp.GetPixel(i - 1, j).R = 255 And bmp.GetPixel(i - 1, j).G = 0 And bmp.GetPixel(i - 1, j).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i + 1, j).R = 255 And bmp.GetPixel(i + 1, j).G = 0 And bmp.GetPixel(i + 1, j).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i, j - 1).R = 255 And bmp.GetPixel(i, j - 1).G = 0 And bmp.GetPixel(i, j - 1).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i, j + 1).R = 255 And bmp.GetPixel(i, j + 1).G = 0 And bmp.GetPixel(i, j + 1).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i + 1, j + 1).R = 255 And bmp.GetPixel(i + 1, j + 1).G = 0 And bmp.GetPixel(i + 1, j + 1).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i - 1, j - 1).R = 255 And bmp.GetPixel(i - 1, j - 1).G = 0 And bmp.GetPixel(i - 1, j - 1).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i + 1, j - 1).R = 255 And bmp.GetPixel(i + 1, j - 1).G = 0 And bmp.GetPixel(i + 1, j - 1).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
If (bmp.GetPixel(i - 1, j + 1).R = 255 And bmp.GetPixel(i - 1, j + 1).G = 0 And bmp.GetPixel(i - 1, j + 1).B = 0) Then
bmp.SetPixel(i, j, Color.Transparent)
End If
End If
Next
Next
textBrush.Dispose()
g.Dispose()
bmp.Save("TESTE.png", System.Drawing.Imaging.ImageFormat.Png)