VB 代码VB小程序:消除旋转图像的锯齿现象

标签:
vb代码vb小程序消除图像旋转锯齿波 |
分类: VB小程序 |
■当前位置:首页 >
VB
小程序 >
消除旋转图像的锯齿现象
73.消除旋转图像的锯齿现象
本程序是我编写的小程序 将图像快速旋转任意角度
任意角度旋转图像,不论用控件的 PSet 方法,还是用 API 函数 PlgBlt 和
SetBitmapBits,不可避免的都会产生程度不同的锯齿现象,如下面图 1
中人物脸部轮廓、图像边界等轮廓线分明的地方,就有明显的锯齿现象。
本程序尝试用编程消除旋转图像后产生的锯齿现象,具体方法是:先用 SetBitmapBits
获取图像每个像素的颜色值,然后分别将旋转后的像素坐标 x,y 转变为旋转前的坐标 x1,y1 ,再从源图像 x1,y1
处及其相邻点按比例取得颜色值赋值给 x,y 点。例如旋转后的坐标是(5,6),转变为旋转前的坐标假定为(4.2 ,
5.7),在源图像上,x 方向分别在点(4,5)和(5,5)各取 80% 和 20%,y 方向分别在点(4,5)和(4,6)各取
30% 和 70%,横纵两个方向平均后就将其设置为目的图像(5,6)点的颜色值。取值示意图如下:
http://s4/middle/b1879bb4x7a865e0aaf03&690代码VB小程序:消除旋转图像的锯齿现象" TITLE="VB
下面是旋转角度 20 度时不勾选和勾选“消除锯齿现象”的比较图,锯齿现象得到了明显改善:
http://s5/middle/b1879bb4xc93fac6ae774&690代码VB小程序:消除旋转图像的锯齿现象" TITLE="VB
http://s6/middle/b1879bb4xc93fac773275&690代码VB小程序:消除旋转图像的锯齿现象" TITLE="VB
当然,要完全消除锯齿现象,恐怕只有专业的制图软件能完全做到了。
' '下面是窗体代码,在 VB6 调试通过
'需在窗体放置以下 8
个控件,所有控件不必设置任何属性(包括位置和大小),全部采用默认设置:
'
'本人原创,转载请注明文章来源:
'百度
http://hi.baidu.com/100bd/blog/item/05643af5230b94fd7709d7e4
'新浪 http://blog.sina.com.cn/s/blog_b1879bb401018hc8.html
Private Type BitMap
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA"
(ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As
Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap
As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap
As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim ctExit As Boolean, ctWork As Boolean, ctP180 As Single
' As Double
Private Sub Form_Load()
End Sub
Private Sub RndImg(Kj As Object)
End Sub
Private Sub Command1_Click()