一个图像滤光处理程序
2006-02-20 10:22
281 查看
一个图像滤光处理程序
滤光处理是图像处理的一个重要组成部分,通俗地讲,图像的滤光处理就是透过某种颜色的玻璃去观看图像时的效果。本人用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运行后,随便选择一种颜色或几种颜色的组合,并自由调整滤光颜色的强度,然后按下“滤光处理”按钮,即可进行滤光。
滤光处理是图像处理的一个重要组成部分,通俗地讲,图像的滤光处理就是透过某种颜色的玻璃去观看图像时的效果。本人用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运行后,随便选择一种颜色或几种颜色的组合,并自由调整滤光颜色的强度,然后按下“滤光处理”按钮,即可进行滤光。
相关文章推荐
- 小程序,一个简单的图像处理
- 【数字图像处理】一个简单的BMP灰度处理程序
- 每天一个小程序—0000题(python图像处理)
- OpenCV开发环境搭建-并测试一个图像灰度处理程序
- 一个简单的图像处理的程序
- C#写的照片上传代码--建立一个一般处理程序
- 例程讲解关于图像处理程序中文件操作时对于STL容器的使用
- 网址重写 由一个任意或是自己定义的地址转到指定的处理程序 4000 上来
- 一个用于图像标注的简单Web程序
- 图形图像处理-之-一个复杂度为常数的快速局部自适应算法 下篇
- 一个在DOS下处理中文和长名字目录和文件的程序(原创)
- 一个自定义事件的处理程序
- 图像处理 简单的效果处理 和 格式转换 小程序
- 一个很好的图像处理博客
- 图形图像处理-之-一个复杂度为常数的快速局部自适应算法 下篇
- delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。 使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如
- 今天学习了在一般处理程序中写一个计算器
- 转:[译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
- 一个基于Qt的用cvAdaptiveThreshold二值化图像的程序
- 写了一个程序用来处理字符串,把一张列表中的题目序号提取出来,然后跟自己昨晚的列表比较,找出来还没有做过的题目列表