VB.NET在动态创建的png图像周围绘制两像素透明边框?

VB.NET在动态创建的png图像周围绘制两像素透明边框?,vb.net,system.drawing,system.drawing.graphics,Vb.net,System.drawing,System.drawing.graphics,我对编程图形很陌生,更不用说VB了,所以我在这里遇到了麻烦。我基本上已经完成了所有的代码,但我缺少的是在图像周围添加几个像素的透明填充/边框,我被卡住了。我环顾四周,但我所看到的示例似乎极其复杂,在我看来就像是一个过激的动作(一页接一页的代码) 如有任何提示或易于理解的教程/示例,将不胜感激 在下面附加当前代码: 当前代码 Dim img As Image = New Bitmap(100, 100) Dim Drawing As Graphics = Graphics.FromImage(i

我对编程图形很陌生,更不用说VB了,所以我在这里遇到了麻烦。我基本上已经完成了所有的代码,但我缺少的是在图像周围添加几个像素的透明填充/边框,我被卡住了。我环顾四周,但我所看到的示例似乎极其复杂,在我看来就像是一个过激的动作(一页接一页的代码)

如有任何提示或易于理解的教程/示例,将不胜感激

在下面附加当前代码:

当前代码

Dim img As Image = New Bitmap(100, 100)

Dim Drawing As Graphics = Graphics.FromImage(img)
Dim rand As New Random
Dim bgcolor As Color = Color.FromArgb(rand.Next(64, 196), rand.Next(64, 196), rand.Next(64, 196))

Dim family As FontFamily = Nothing

Dim fontName As String = "Lucida Sans Typewriter"
Dim fontSize As Single = 42

Using fontTester As New Font(fontName, fontSize, FontStyle.Regular, GraphicsUnit.Pixel)
    If fontTester.Name = fontName Then 
        family = New FontFamily("Lucida Sans Typewriter")
    Else
        Try
            Dim privateFonts As New System.Drawing.Text.PrivateFontCollection()
            privateFonts.AddFontFile(HttpContext.Current.Server.MapPath("~/") + "\styles\fonts\LTYPE.ttf")
            Dim font As New System.Drawing.Font(privateFonts.Families(0), 42)
            family = font.FontFamily
        Catch ex As Exception
            family = New FontFamily("Arial")
        End Try
    End If
End Using

Dim FontText As Font = New Font(family, 42, FontStyle.Regular)

Drawing.Clear(bgcolor)
Dim textBrush As Brush = New SolidBrush(Color.White)
Drawing.DrawString(initials, FontText, textBrush, 7, 16)
Drawing.Save()
textBrush.Dispose()
Drawing.Dispose()

可以通过将图像清除为透明,然后在每个方向上绘制一个比图像小2像素的背景矩形来执行此操作:

Drawing.Clear(Color.Transparent)
Drawing.FillRectangle(New SolidBrush(bgcolor), 2, 2, 96, 96)
'Draw text ...

下面的代码是将黑色字体周围的一个像素更改为透明的示例。应该很容易扩展代码来考虑一个以上的像素。如果图像不是示例代码中显示的文本字符串那样的矩形,则此代码有效。即使将字体颜色设置为黑色,也有一些像素不是纯黑色的,它们有一些阴影,因此在我的示例中,我只检查红色分量是否为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)
将bmp设置为新位图(宽度、高度)
Dim g As Graphics=Graphics.FromImage(bmp)
Dim rand作为新的随机变量
暗淡bgcolor As Color=颜色。红色
g、 清晰(彩色)
Dim FontText As Font=新字体(“Arial”,42,FontStyle.Regular)
Dim textBrush As Brush=新的SolidBrush(颜色.黑色)
g、 抽绳(“Teste”、FontText、textBrush、7、16)
对于i,整数=0到宽度-1
对于j,整数=0到高度-1
如果bmp.GetPixel(i,j).R<255,则
如果(bmp.GetPixel(i-1,j).R=255,bmp.GetPixel(i-1,j).G=0,bmp.GetPixel(i-1,j).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i+1,j).R=255和bmp.GetPixel(i+1,j).G=0和bmp.GetPixel(i+1,j).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i,j-1).R=255和bmp.GetPixel(i,j-1).G=0和bmp.GetPixel(i,j-1).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i,j+1).R=255和bmp.GetPixel(i,j+1).G=0和bmp.GetPixel(i,j+1).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i+1,j+1).R=255和bmp.GetPixel(i+1,j+1).G=0和bmp.GetPixel(i+1,j+1).B=0),则
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i-1,j-1).R=255和bmp.GetPixel(i-1,j-1).G=0和bmp.GetPixel(i-1,j-1).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i+1,j-1).R=255和bmp.GetPixel(i+1,j-1).G=0和bmp.GetPixel(i+1,j-1).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果(bmp.GetPixel(i-1,j+1).R=255和bmp.GetPixel(i-1,j+1).G=0和bmp.GetPixel(i-1,j+1).B=0),那么
bmp.SetPixel(i,j,Color.Transparent)
如果结束
如果结束
下一个
下一个
textBrush.Dispose()
g、 处置
保存(“TESTE.png”,System.Drawing.Imaging.ImageFormat.png)

谢谢,这真的很简单(为什么我现在还没有想到这一点,这是我无法理解的),而且直截了当。它工作得很好。