分享
 
 
 

用VB设计图像滤镜

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

作者:任毅

PhotoShop图像处理软件最引人之处莫过于它的滤镜功能,如果你掌握了一些VB的知识,那么你也能够设计出图像处理大师级的滤镜效果。

首先你必须了解VB中图像处理的一些基本知识。在VB中有两个操作像素的基本方法:PSet和Point。PSet生成像素;Point则读取像素值。并且显示器上所能显示的所有颜色都可以用RGB值来表示,VB中提供了RGB()函数,有三个变量RGB(Red,Green,Blue),如RGB(255,0,0)表示红色,RGB(255,255,0)表示黄色等。 VB中没有提供将一个像素点的颜色返回成RGB值的函数,但我们可以用以下方法获得某一点的RGB值:

Pi& = Picture.Point(X, Y)

Red = Pi& Mod 256

Green = ((pi& And &HFF00) / 256&) Mod 256&

Blue = (pi1& And &HFF0000) / 65536

有了以上知识,再通过一些滤镜算法便可以产生一些很不错的滤镜效果。在此以浮雕、木刻、油画和灯光共四个滤镜效果为例。

具体操作步骤如下:

新建一个窗体 Form1,在图体上建立一个Picture1图像框,将其AutoSize的值设为 Ture,然后用Picture1的LoadPicture()命令调入一幅图像,再通过各种事件调用过滤过程(这里以Picture1_Click()事件来调用)。

以下为具体代码:

Private Sub Form_Load()

Form1.AutoRedraw = True

Form1.ScaleMode = 3

Picture1.AutoRedraw = True

Picture1.ScaleMode = 3

Picture1.Picture = LoadPicture(图像文件全途径名)

End Sub

浮雕

浮雕的算法是在相邻像素的差值上加上一个常数,使黑暗区域增加一些亮度,我们可以取同一行、同一列或对角线上的相邻像素间的差值加上一个常数。

Private Sub Picture1_Click()

Dim pi1&, pi2&

Dim x, y

Dim A, B As Integer

Dim Red, Green, Blue As Integer

A = 1

B = 1

xx = Picture1.ScaleWidth

yy = Picture1.ScaleHeight

For x = 1 To xx - 2

For y = 1 To yy - 2

pi1& = Picture1.Point(x, y)

pi2& = Picture1.Point(x + A, y + B)

Red = Abs((pi1& Mod 256) - (pi2& Mod 256) + 128)

Green = Abs((((pi1& And &HFF00) / 256&) Mod 256&) - (((pi2& And &HFF00) / 256&) Mod 256&) + 128)

Blue = Abs(((pi1& And &HFF0000) / 65536) - ((pi2& And &HFF0000) / 65536) + 128)

Picture1.PSet (x, y), RGB(Red, Green, Blue)

Next y

Next x

Picture1.Refresh

End Sub

油画

油画滤镜的算法是:用当前点四周一定范围内任一点的颜色来代替当前点的颜色。

Private Sub Picture1_Click()

Dim pi&

Dim x, y

Dim A, B As Integer

Dim Red, Green, Blue As Integer

xx = Picture1.ScaleWidth

yy = Picture1.ScaleHeight

For x = 2 To xx - 3

For y = 2 To yy - 3

A = Rnd * 3 - 1

B = Rnd * 3 - 1

pi = Picture1.Point(x + A, y + B)

Red = (pi& Mod 256)

Green = (((pi& And &HFF00) / 256&) Mod 256&)

Blue = ((pi& And &HFF0000) / 65536)

Picture1.PSet (x, y), RGB(Red, Green, Blue)

Next y

DoEvents

Next x

Picture1.Refresh

End Sub

木刻(图三)

这个滤镜的算法相对简单一点。只需判断当前点是浅色还是深色(即三颜色元素的平均值是否大于128),浅色用白色RGB(255,255,255)代替;深色用黑色RGB(0,0,0)代替。

Private Sub Picture1_Click()

Dim pi&

Dim x, y

Dim A, B As Integer

Dim Red, Green, Blue As Integer

A = 1

B = 1

xx = Picture1.ScaleWidth

yy = Picture1.ScaleHeight

For x = 0 To xx

For y = 0 To yy

pi = Picture1.Point(x, y)

Red = (pi& Mod 256)

Green = (((pi& And &HFF00) / 256&) Mod 256&)

Blue = ((pi& And &HFF0000) / 65536)

If (Red + Green + Blue) / 3 < 128 Then

Picture1.PSet (x, y), RGB(0, 0, 0)

Else

Picture1.PSet (x, y), RGB(255, 255, 255)

End If

Next y

Next x

Picture1.Refresh

End Sub

灯光

灯光滤镜的算法很多,这里介绍一种小口径灯光滤镜,具体算法是取一点为光源(这里以30,40为例),从光线末端开始向光源点逐渐增加亮度(向白色接近)。代码为:

Private Sub Picture1_Click()

Dim pi1&, pi2&

Dim x, y

Dim A, B As Integer

Dim Red, Green, Blue As Integer

A = 30

B = 40

xx = Picture1.ScaleWidth

yy = Picture1.ScaleHeight

For x = 1 To xx

For y = 1 To yy

pi1 = Picture1.Point(x, y)

If Sqr((A - x) * (A - x) + (B - y) * (B - y)) - 40 < 0 Then

Red = ((pi1& Mod 256) + 200 * (1 - (Sqr((A - x) * (A - x) + (B - y) * (B - y)) + 1) / 40))

Green = ((((pi1& And &HFF00) / 256&) Mod 256&) + 200 * (1 - (Sqr((A - x) * (A - x) + (B - y) * (B - y)) + 1) / 40))

Blue = (((pi1& And &HFF0000) / 65536) + 200 * (1 - (Sqr((A - x) * (A - x) + (B - y) * (B - y)) + 1) / 40))

If Red < 0 Then Red = 0

If Red > 255 Then Red = 255

If Green < 0 Then Green = 0

If Green > 255 Then Green = 255

If Blue < 0 Then Blue = 0

If Blue > 255 Then Blue = 255

Picture1.PSet (x, y), RGB(Red, Green, Blue)

End If

Next y

Next x

Picture1.Refresh

End Sub

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有