一个图像滤光处理程序


【实例说明】
    滤光处理是图像处理的一个重要组成部分,通俗地讲,图像的滤光处理就是透过某种颜色的玻璃去观看图像时的效果。本例子实现了图像的滤光处理,既可以用单独的红色、绿色、蓝色进行滤光,也可以用这三种颜色的任意组合颜色实现滤光,而且任何一种颜色都可以随便调整强度,效果颇佳。

【编程思路】
    调用API函数。

【设计步骤】
    1.新建一个标准工程,创建一个新窗体,默认名为Form1。
    2.①添加一个PictureBox控件,Picture1加载一副图片。
      ②添加三个TextBox控件,名称都设为Text1,Index属性分别为0、1、2,Text属性为空。
      ③三个HScrollBar控件,名称都设为HScroll1,Index属性分别为0、1、2,Min和Value都设为0,SmallChange都设为2,LargeChange都设为10,Max都设为100。
      ④和三个HScrollBar相对应,在其下方创建三个Label控件,Caption属性分别设为“红色滤光”、“绿色滤光”、“蓝色滤光”。
      ⑤添加两个CommandButton控件。

    3.源程序  [素材源程序下载]


Option Explicit

'API函数声明
Private Declare Function GetPixel Lib "gdi32" _
        (ByVal hdc As Long, _
        ByVal x As Long, _
        ByVal y As Long) As Long
Private Declare Function SetPixel Lib "gdi32" _
        (ByVal hdc As Long, _
        ByVal x As Long, _
        ByVal y As Long, _
        ByVal crColor As Long) As Long

'滤光处理
Private Sub Command1_Click()
        Dim i As Long, j As Long
        Dim hdcP, W, H, R, G, B, RgbP As Long
        W = Picture1.ScaleWidth
        H = Picture1.ScaleHeight
        hdcP = Picture1.hdc
        For i = 1 To W
                DoEvents
                For j = 1 To H
                        '获取图像上某点的像素值
                        RgbP = GetPixel(hdcP, i, j)
                        R = RgbP And &HFF
                        G = ((RgbP And &HFF00) / 256&) Mod 256&
                        B = (RgbP And &HFF0000) / 65536
                        R = Yes(R + HScroll1(0).Value / 2 * 5)
                        G = Yes(G + HScroll1(1).Value / 2 * 5)
                        B = Yes(B + HScroll1(2).Value / 2 * 5)
                        RgbP = RGB(R, G, B)
                        SetPixel hdcP, i, j, RgbP
                Next j
        Next i

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

        For i = 0 To 2
                HScroll1(i).Value = 0
                Text1(i).Text = "0%"
        Next i

        Set Picture1.Picture = Picture1.Image
End Sub

Private Sub Command2_Click()
        End
End Sub

Private Sub Form_Load()
        Dim i As Long
        Form1.ScaleMode = 3
        Picture1.ScaleMode = 3
        Picture1.AutoRedraw = True
        For i = 0 To 2
                Text1(i).Text = "0%"
        Next i
        Picture1.AutoRedraw = False
End Sub

Private Sub HScroll1_Change(Index As Integer)
        Text1(Index).Text = CStr(HScroll1(Index).Value) + "%"
End Sub

'另外,还需加入一个校验颜色值的子函数:
Private Function Yes(ByVal myColor As Long) As Long
        If myColor > 255& Then
                Yes = 255
        ElseIf myColor < 0 Then
                Yes = 0
        Else
                Yes = myColor
        End If
End Function