实现代码:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Paint ' 创造容器的paint事件
Dim btp As New Bitmap(300, 300) ' 定义位图变量1
Dim btp2 As New Bitmap(300, 300) ' 定义位图变量2
Dim a As Graphics = Graphics.FromImage(btp) '创建绘图对象
a.DrawImage(PictureBox1.Image, 0, 0, 300, 300) '将图片框1的图像以300x300象素写入位图变量1中,这样做是将背景图片缩放以300x300
Dim b As Graphics = Graphics.FromImage(btp2) ' 创建绘图对象2
Dim r, x, y, alph1 As Integer
Dim xtoy As Rectangle '定义矩形
Dim c2, c3 As Color '定义颜色
Dim br1 As SolidBrush ' 定义填充颜色
While y < 300 'y是位图中象素点y坐标
x = 0
While x < 300 'x是位图中象素点的x坐标
xtoy = New Rectangle(x, y, 1, 1) ' 定义位置x,y尺寸为宽度1x1象素的矩形用来代替点(vb.net没找到画点函数:)
r = Math.Sqrt((x - 150) ^ 2 + (y - 150) ^ 2) '计算坐标x,y坐标处相对图片中点的距离
alph1 = 255 - (r - 80) * 255 / 70 ' 以到中心点的距离计算出透明度(0为最透明,255不透明)
If alph1 <= 0 Then alph1 = 0
If alph1 >= 255 Then alph1 = 255
If r <= 50 Then alph1 = 255 '图片中心半径50象素内不透明
c2 = btp.GetPixel(x, y) '获取位图指定点的颜色值(RGB)
c3 = System.Drawing.Color.FromArgb(alph1, c2) ‘生成(ARGB)色
br1 = New SolidBrush(c3)‘生成画笔色
b.FillRectangle(br1, xtoy) '写入新颜色点
x = x + 1 .'x坐标加1
End While
y = y + 1 'y坐标加1
End While
PictureBox2.Image = btp2 '将重新生成后的图片写入图片框中
a.Dispose()
b.Dispose()
End Sub
应用实例图: