VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 一个图像滤光处理程序
发表评论(0)作者:, 平台:, 阅读:8649, 日期:2000-03-12


一个图像滤光处理程序





  滤光处理是图像处理的一个重要组成部分,通俗地讲,图像的滤光处理就是透过某种颜色的玻璃去观看图像时的效果。本人用VB5编程实现了图像的滤光处理,既可以用单独的红色、绿色、蓝色进行滤光,也可以用这三种颜色的任意组合颜色实现滤光,而且任何一种颜色都可以随便调整强度,效果颇佳。下面具体介绍实现方法。

  首先新建一个窗体Form1,并创建一个PictureBox控件,把Picture1的Picture属性设置为一副图像。接着引入WINDOWS的两个API函数,并在代码窗体的起始位置声明:


Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, _

 ByVal x As Long,ByVal Y As Long)As Long

Private Declare Function SetPixelV Lib "gdi32" (ByVal hDC As Long, _

 ByVal x As Long,ByVal Y As Long,ByVal crColor As Long) As Long


  然后在Picture1的下方按水平方向连续创建三个TextBox控件,名称都设为Txt,Index属性分别为1、2、3,Text属性为空。和三个TextBox相对应,在其下方创建三个HScrollBar控件,名称都设为HS1,Index属性分别为1、2、3,Min和Value都设为0,SmallChange都设为2,LargeChange都设为10,Max都设为100。和三个HScrollBar相对应,在其下方创建三个Label控件,Caption属性分别设为“红色滤光”、“绿色滤光”、“蓝色滤光”。以上相对应的三组控件都要上下紧挨、大小适中。双击任何一个HScrollBar控件,在HS1_Change()事件中添入下列代码:


Private Sub HS1_Change(Index As Integer)

  Txt(Index).Text = CStr(HS1(Index).Value)+"%"

End Sub


  最后在Form1窗体的正下方创建一个CommandButton控件,名称设为ComLg,Caption属性设为“滤光处理”。双击该按钮,在ComLg_Click()事件中添入下列代码:


Private Sub ComLg_Click()

  Dim hDCp, Wdh, Hgh, RedC, GreenC, BlueC, Rgbp As Long

  Wdh = Picture1.ScaleWidth

  Hgh = Picture1.ScaleHeight

  hDCp = Picture1.hDC

  For i& = 1 To Wdh

    For j& = 1 To Hgh

      Rgbp = GetPixel(hDCp,i&,j&) '获取图像上某点的像素值

      RedC = Rghp And & HFF

      GreenC = ((Rgbp And & HFF00)/256&) Mod 256&

      BlueC = (Rgbp And & HFF0000)/65536

      RedC = Ys(RedC + HS1(1).Value / 2 * 5)

      GreenC = Ys(GreenC + HS1(2).Value / 2 * 5)

      BlueC = Ys(BlueC + HS1(3).Value / 2 * 5)

      Rgbp = RGB(RedC, GreenC, BlueC)

      SetpixelV hDCp, i&, j&, Rgbp

    Next j&

  Next i&

  MsgBox "图像复位后可再次进行滤光",0,"图像复位"

  For i& = 1 To 3

    HS1(i&).Value = 0

    Txt(i&).Text = "0%"

  Next i&

  Set Picture1.Picture=Picture1.Image

End Sub


  另外,还需加入一个校验颜色值的子函数:


Private Function Ys(ByVal mColor As Long) As Long

  If mColor > 255& Then

    Ys = 255

  ElseIf mColor < 0 Then

    Ys = 0

  Else

    Ys= mColor

  End If

End Function


  Form_load()事件中添入下列代码:


Private Sub Form_Load()

  Form1.ScaleMode = 3

  Picture1.ScaleMode= 3

  Picture1.AutoRedraw = True

  For i% = 1 To 3

    Txt(i%).Text = "0%"

  Next i%

  Picture1.AutoRedraw = False

End Sub


  按F5运行后,随便选择一种颜色或几种颜色的组合,并自由调整滤光颜色的强度,然后按下“滤光处理”按钮,即可进行滤光。