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