VB中实现图形柔和化
--------------------------------------------------------------------------------
柔化可使原来的图形变成模糊化,其效果就好像透过毛玻璃看一物体(如图):
原理:位图是显示在不同控件上的对像素进行处理的图形,而位图中任何可以想像的颜色都可以表示为红、绿、蓝三原色来表示,我们可以通过VB中的Point 方法在图形中读取像素值,然后分析出这个像素值的三原颜色值,并把这些颜色值放在一个三维数组中。图形的柔化,就是使相邻像素间的颜色差别减小。若取9个像素为一组(如图),其中像素5就是要处理的像素,它的红、绿、蓝三值分别取其周围8个像素红、绿、蓝三值的平均值,使像素5的颜色向周围像素靠近,从而达到模糊的效果。
主要控件设计:
对像 属性 设置值
Picture1 Scalemode 3
Autoredraw True
Autosize True
Form1 Windowstate 0
程序代码:
Di mi magepls(2,1000,1000)As Integer‘数组用于存放各像素的三原颜色值Di mx,y As IntegerPrivate Sub Command1_Click()Command1.Visible =FalseDi mi ,jDi mred As Integer ,green As Integer ,blue As IntegerDi mpl &CommonDialog1.Filter ="位图(*.BMP)|*.BMP"‘用对话框装入图形文件CommonDialog1.ShowOpenPicture1.Picture =LoadPicture(CommonDialog1.filename)Form1.Refreshx =Picture1.Scale Width‘获取图形X 坐标值y =Picture1.ScaleHeight‘获取图形Y 坐标值Form1.Width =Form1.ScaleX(Picture1.Width ,vbPixels ,vbTwips)Form1.Height =Form1.ScaleY(Picture1.Height ,vbPixels ,vbTwips)Form1.Refresh‘分析各像素的颜色,并放在数组i magepls 中For i =0To y -1For j =0To x -1pl &=Form1.Picture1.Point(j ,i)‘获取像素的颜色值(长整形)red =pl &Mod 256‘获取像素的红色值green =((pl &And &HFF00)/256&)Mod 256&‘获取像素的绿色值blue =(pl &And &HFF0000)/65536‘获取像素的蓝色值i magepls(0,i ,j)=redi magepls(1,i ,j)=greeni magepls(2,i ,j)=blueNextProgressBar1.Value =i *100/(y -1)‘分析图形的进程显示Next‘模糊过程For i =1To y -2For j =1To x -2red =i magepls(0,i -1,j -1)+i magepls(0,i-1,j)+i magepls(0,i_-1,j +1)+i magepls(0,i ,j -1)+i magepls(0,i ,j)+i magepls(0,i ,j +1)+_i magepls(0,i +1,j -1)+i magepls(0,i +1,j)+i magepls(0,i +1,j +1)green =i magepls(1,i -1,j -1)+i magepls(1,i-1,j)+i magepls(1,_i -1,j +1)+i magepls(1,i ,j -1)+i magepls(1,i ,j)+i magepls(1,i ,j +1)+_i magepls(1,i +1,j -1)+i magepls(1,i +1,j)+i magepls(1,i +1,j +1)blue =i magepls(2,i -1,j -1)+i magepls(2,i-1,j)+i magepls(2,_i -1,j +1)+i magepls(2,i ,j -1)+i magepls(2,i ,j)+i magepls(2,i ,j +1)+_i magepls(2,i +1,j -1)+i magepls(2,i +1,j)+i magepls(2,i +1,j +1)Picture1.PSet (j ,i ),RGB(red /9,green /9,blue /9)NextPicture1.RefreshNext End SubPrivate Sub Command2_Click()‘结束演示End End Sub(浙江省新昌中学俞永江312500)
文章来源于领测软件测试网 https://www.ltesting.net/
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073