重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在按钮的点击时间里面,把文本框的值取到,然后通过拼接sql语句的方式,去数据库查询,得到结果集Ds,绑定给DataGridView就行了。
公司专注于为企业提供网站设计、成都网站建设、微信公众号开发、商城网站建设,微信小程序开发,软件按需制作网站等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,创新互联更提供一系列网站制作和网站推广的服务。
gdi+没有提供模糊的功能,也没有相应的api,要做模糊效果,照样需要读取像素数组,用模糊算法处理后返给图像。
gdi+倒是提供了反锯齿的功能,但只能使文字或图形边缘与背景过度更自然,不能用来模糊图像。
用vb的GetDIBits和SetDIBits,应该不会很慢呀,我用vb.net的LockBits获取像素数组,再取周围像素的平均值模糊一个200x200像素的图像,基本上都用不到0.02秒的,用vb和gdi应该不会比这个慢
思路如下:
得到图片文件夹路径里所有图片的文件名。
对这些文件名进行判断,是否包含你所谓的模糊的文字。
当判断发现包含时,就复制对应的图片到你想到的对应的目录。
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices
''' summary
''' Summary description for TextShadow
''' /summary
''' remarks/remarks
Public Class gaoshiBLUR
Public newbmp As Bitmap
StructLayout(LayoutKind.Explicit) Structure rgbA
FieldOffset(0) Public R As Byte
FieldOffset(1) Public G As Byte
FieldOffset(2) Public B As Byte
FieldOffset(3) Public A As Byte
FieldOffset(0) Public col As Integer
End Structure
Private m_radius As Integer = 5
''' summary
''' 高斯卷积矩阵
''' /summary
''' remarks/remarks
Private gaussMatrix As Integer()
''' summary
''' 卷积核
''' /summary
''' remarks/remarks
Private nuclear As Integer = 0
''' summary
''' 模糊半径
''' /summary
''' value/value
''' returns/returns
''' remarks/remarks
Public Property Radius() As Integer
Get
Return m_radius
End Get
Set(ByVal Value As Integer)
If (m_radius Value) Then
m_radius = Value
MakeGaussMatrix()
End If
End Set
End Property
''' summary
''' 高斯模糊
''' /summary
''' param name="bmp"要处理的图像/param
''' remarks/remarks
Public Sub MaskShadow(ByVal bmp As Bitmap)
If nuclear = 0 Then MakeGaussMatrix()
Dim rt As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
' 克隆临时位图,作为卷积源
Dim tmp As Bitmap = bmp.Clone()
Dim dest As BitmapData = bmp.LockBits(rt, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb)
Dim source As BitmapData = tmp.LockBits(rt, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb)
Debug.Print(Radius)
Debug.Print(dest.Width.ToString)
Debug.Print(nuclear)
Dim Number As Integer = (bmp.Height * dest.Stride - 1) / 4 ' 图像数据元素的个数,注意.net中数组下标是从0开始的
Dim bmpdata(Number) As Integer
Dim tmpdata(Number) As Integer
Dim TMPrgb(Number) As rgbA '临时参考颜色
Dim BMPrgb(Number) As rgbA '计算结果后的颜色
'ReDim bmpdata(Number)
'ReDim TMPrgb(Number)
Marshal.Copy(source.Scan0, tmpdata, 0, Number)
Dim i As Long
Dim j As Long
j = Number
Dim w, h As Long
Dim yi, xi As Long
Dim iw, ih, iiw, iih, iii As Long
Dim k As Long
Dim nn As Integer = (Radius * 2 + 1) ^ 2
Dim n As Integer = Radius * 2 + 1
w = bmp.Width
h = bmp.Height
' System.Array.Copy(TMPrgb, tmpdata, j)
For i = 0 To j
TMPrgb(i).col = tmpdata(i)
Next i
i = 0
For i = 0 To j
ih = Int(i / w)
iw = i - ih * w
Dim r As Double = 0
Dim g As Double = 0
Dim b As Double = 0
Dim a As Double = 0
Dim weight As Double
For k = 0 To nn
'需要解决的是周边遍历颜色值然后相加(r=r1*weight1+r2*weight2+r3*weight3+r4*weight4+r5*weight5+...r*weight)
yi = Int(k / n)
xi = k - yi * n
yi -= Radius
xi -= Radius
iiw = iw + xi
iih = ih + yi
'yi = Int(k / n)
'xi = k - yi * n
'iih = ih + yi - Radius
'iiw = iw + xi - Radius
If (iiw 0 OrElse iih 0) Or (iiw w - 1 OrElse iih h - 1) Then
iiw = iw
iih = ih
iii = i
Else
iii = iih * w
iii += iiw
End If
weight = gaussMatrix(k) / 1000
r += TMPrgb(iii).R * weight
g += TMPrgb(iii).G * weight
b += TMPrgb(iii).B * weight
a += TMPrgb(iii).A * weight
Next
'TMPrgb(i).col = tmpdata(i)
'r = TMPrgb(i).R * weight
'g = TMPrgb(i).G * weight
'b = TMPrgb(i).B * weight
BMPrgb(i).R = IIf(r 255, 255, r)
BMPrgb(i).G = IIf(g 255, 255, g)
BMPrgb(i).B = IIf(b 255, 255, b)
BMPrgb(i).A = IIf(a 255, 255, a)
bmpdata(i) = BMPrgb(i).col
'Debug.Print(TMPrgb(i).R)
Next
Marshal.Copy(bmpdata, 0, dest.Scan0, Number)
tmp.UnlockBits(source)
bmp.UnlockBits(dest)
newbmp = bmp.Clone
tmp.Dispose()
' End Try
End Sub
''' summary
''' 高斯卷积矩阵
''' /summary
''' remarks/remarks
Protected Sub MakeGaussMatrix()
Dim Q As Double = Radius / 2
If (Q = 0.0) Then Q = 0.1
Dim n As Integer = Radius * 2 + 1
Dim index As Integer = 0
nuclear = 0
ReDim gaussMatrix(n * n)
Dim x As Integer
Dim y As Integer
For x = -Radius To Radius
For y = -Radius To Radius
gaussMatrix(index) = Math.Round(Math.Exp(-((x * x + y * y)) / (2.0 * Q * Q)) / (2.0 * Math.PI * Q * Q) * 1000.0)
nuclear += gaussMatrix(index)
index += 1
Next
Next
End Sub
End Class
使用方法.
Dim bmp As Bitmap = PictureBox1.Image.Clone
Dim x As New gaoshiBLUR
x.Radius = 30
x.MaskShadow(bmp)
PictureBox2.Image = x.newbmp.Clone