【正文】
n DeleteObject Lib gdi32 (ByVal hObject As Long) As Long本系統(tǒng)中還使用了其他一些API函數(shù),讀者可以參考相關的資料。具體作法如下:圖像分為nn的方塊,對每一個子塊計算其平均灰度值,然后將方塊中每個像素點的灰度值與平均灰度值進行比較,若大于平均灰度值,則將該像素點灰度值置為255;反之則置為0。(7)圖像扭曲圖像扭曲的原理為將位圖圖像中的每一個像素點按照一定的半徑進行逆時針旋轉(zhuǎn)到新的位置,旋轉(zhuǎn)的角度由該點的原始坐標以及圖像的原始大小決定,整體效果就好像被扭曲了一樣。另外如光電轉(zhuǎn)換過程中的噪聲、照片顆粒噪聲和信息傳輸中的誤差等,從而不能保證正確地求出數(shù)字圖像的密度信息。圖1612 一條與原點距離為s,方向角為θ的一條直線直線上的每一點都滿足方程:利用這個事實,可以找出某條直線來。(15)輪廓提取所謂輪廓提取就是掏空圖形的內(nèi)部點:如果原圖中有一點為黑,且它的8個相鄰點都是黑色時(此時該點是內(nèi)部點),則將該點刪除?!獙⑽粓D寫入位圖空間m_hdc m_hOldDIB = SelectObject(m_hDC, m_hDIB) 39。清空設備描述表 Call EmptyClipboard Call SetClipboardData(CF_BITMAP, clp_hObj) Call CloseClipboard 39。代碼省略,詳細代碼請參見光盤 (6)Engrave濾鏡39。該類的代碼省略,請讀者參考光盤詳細代碼?!4娉尚挛募? hFile = FreeFile Open sFilename For Binary Access Write As hFile Put hFile, , tBFH Put hFile, , aBI() Put hFile, , aData() Close hFile End IfEnd Sub7.cFrame類模塊cFrame類主要在內(nèi)存中創(chuàng)建矩形區(qū)域。—非彩色模式 If (Max = Min) Then S = 0 H = 0 39。如果是滾輪 With If (.) Then Select Case wParam Case Is 0 39?!獜椭频郊糍N板 Call Case 3 39。圖1618 ucToolbar控件21.帶預覽功能的圖像選擇框 在介紹主窗體的時候,通過菜單“File224。Special224。很多時候,需要將一個圖像放大到很多倍,比如進行圖像裁減的時候,此時如果通過鼠標或者鍵盤來移動放大的圖像到想查看的區(qū)域,可能比較麻煩和費時,有了圖像全景的功能,就可以快速的定位到某個區(qū)域。通過“Filter”下拉列表框,可以選擇各種本系統(tǒng)提供的濾鏡,如圖1628所示。該窗體名稱為fPrint。圖1621 質(zhì)量可調(diào)的保存對話框fDialogEx窗體的代碼省略,請讀者參考光盤詳細代碼。20.ucToolbar控件ucToolbar控件用于創(chuàng)建自定義的工具欄?!獎h除選擇線 Call Call Call RaiseEvent Crop Case 1 39。16.mWheel模塊mWheel模塊用于對鼠標的滾輪進行編程。12.mHSL模塊mHSL類用于進行圖像的HSL和RGB兩種顏色系統(tǒng)的轉(zhuǎn)換。—轉(zhuǎn)換成新的色彩模式 Select Case BPP Case 1, 4, 8 39。代碼省略,詳細代碼請參見光盤 (18)Soften濾鏡 39。 圖1613 原始圖像 圖1614 Blue濾鏡(2)Contour濾鏡39。—獲得顏色索引編號 nColors = 2 ^ 39。—刪除原先的DIB Call 39。② Prewitte 算子Prewitte 算子采用的是兩個模板和,分別處理后得到的像素點的較大值,每一個模板的實現(xiàn)和Sobel算子的實現(xiàn)原理一樣。設輸入為{},則濾波器的輸出為:如果推廣到二維,則可以定義輸出為:對于二維的中值濾波,一般采用33或者55的窗口來進行濾波。用這種方法可以去掉引起圖像質(zhì)量劣化的原因之一模糊,并把圖像變得輪廓分明。(5)圖像的旋轉(zhuǎn)圖像的旋轉(zhuǎn)其實就是圖像上像素點的坐標變換,假如旋轉(zhuǎn)前某一點的坐標位[x,y,1],旋轉(zhuǎn)后的坐標為,在二維平面上點繞原點順時針旋轉(zhuǎn)角,則其變換矩陣為:坐標的變換公式:旋轉(zhuǎn)前的圖像上的點如果用上述變換矩陣,則有可能多個點映射到同一個點,為此我們采用坐標的反變換公式,先求出旋轉(zhuǎn)后的圖像的點對應的旋轉(zhuǎn)前的圖像上的點,此時只需把旋轉(zhuǎn)前的點的像素值賦給旋轉(zhuǎn)后的相應的點,這種方法可以保證旋轉(zhuǎn)后的每一個點都能被賦值。同一幅灰度圖像,不同部位其明暗分布可能是不同的。這種伸縮模式定義了Windows如何對伸縮過程中剔除的掃描線進行控制。windows手冊建議用GetObject這個名字來引用該函數(shù)?!咎砑佑脩艨丶浚瑏硖砑幼远x控件。單擊“退出”按鈕結束程序。圖像是由多個點組成的,如果將每一個點都按一定的角度進行旋轉(zhuǎn),整幅圖像也就進行了旋轉(zhuǎn)。因此,圖像的旋轉(zhuǎn)就變?yōu)辄c的旋轉(zhuǎn),利用逐點計算的方法就可以實現(xiàn)整幅畫面的旋轉(zhuǎn)。 實例實現(xiàn)39。(2)添加屬性和方法為了能夠讓用戶能夠使用該控件,總是需要為該控件添加一些屬性和方法,下面介紹為控件添加屬性和方法。Private Declare Function GetObject Lib gdi32 Alias GetObjectA (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long(6)GetObjectType函數(shù)判斷由指定句柄引用的GDI對象的類型Private Declare Function GetObjectType Lib gdi32 (ByVal hgdiobj As Long) As Long(7)SelectObject函數(shù)用于選擇對象。對于VB窗體和控件,倘若在API繪圖過程中使用這個函數(shù),建議恢復原來的StretchBlt模式。因此,在對灰度圖像進行二值化的過程中,如果選用全局閾值法顯然是不合適的。反變換公式如下:此時的旋轉(zhuǎn)的中心點在圖像的原點,也就是客戶區(qū)坐標的左上角,如果要求旋轉(zhuǎn)的中心點為圖像的中心,則反變換公式修改如下:其中icenter和jcenter分別是旋轉(zhuǎn)前圖像的寬度和高度的一半,此時在內(nèi)存中動態(tài)創(chuàng)建兩個位圖對象TempBmp和NewBmp,一個用于存放旋轉(zhuǎn)前的位圖(TempBmp),另一個則是存放旋轉(zhuǎn)后的位圖(NewBmp),位圖格式為24位真彩色。卷積是實現(xiàn)銳化的一個很好的變通。下面的實例是用33的窗口進行中值濾波,讀者也可以自己設置窗口大小。③ 高斯拉普拉斯算子由于噪聲點(灰度與周圍點相差很大的點)對邊沿檢測有一定的影響,所以效果更好的邊沿檢測器是高斯拉普拉斯(LOG)算子。—創(chuàng)建位圖頭 With m_tBIH .biSize = Len(m_tBIH) .biPlanes = 1 .biBitCount = 32 .biWidth = NewWidth .biHeight = NewHeight .biSizeImage = (4 * NewWidth) * NewHeight End With 39?!@得調(diào)色板列表 Call GetDIBColorTable(lhDC,0,nColors,ByVal (nColors)) ReDim aData(1 To 40 + 4 * (2 ^ )) With tBIH .biSize = 40 .biPlanes = 1 .biBitCount = .biWidth = .biHeight = End With Call CopyMemory(aData(1), tBIH, 40) Call GetDIBColorTable(lhDC, 0, nColors, aData(41)) Call GetDIBits(lhDC, , 0, , ByVal (, , ), aData(1), DIB_ RGB_COLORS) End If 39。代碼省略,詳細代碼請參見光盤 (3)Contrast濾鏡39。代碼省略,詳細代碼請參見光盤 (19)Texturize濾鏡 39。 Palette based (Get palette indexes) aData() = () Case 24 39。(1)RGBtoHSL函數(shù),該函數(shù)將RGB轉(zhuǎn)化成HSLPublic Sub RGBtoHSL(ByVal R As Byte, ByVal G As Byte, ByVal B As Byte, H As Single, S As Single, L As Single) Dim Max As Single Dim Min As Single Dim delta As Single Dim rR As Single, rG As Single, rB As Single 39。通過滾輪來放大或者縮小圖像。—Copy菜單 39。其運行界面如圖1618所示。22.為圖像選擇材質(zhì)的窗體本系統(tǒng)中,有一種濾鏡效果就是為圖像增加各種材質(zhì)效果,因此在實現(xiàn)該功能值錢,需要選擇一種材質(zhì)圖片。 圖1624 顯示圖像信息 圖1625 圖像打印設置窗體fPrint窗體的代碼省略,請讀者參考光盤詳細代碼。 圖1627 濾鏡預覽窗體 圖1628 濾鏡選擇框關于數(shù)字圖像處理系統(tǒng)的核心功能和代碼,就介紹到此。Panoramic”可以進入到圖像全景窗體。在主界面中,通過菜單“Filter224。該控件的代碼省略,請讀者參考光盤詳細代碼?!獎?chuàng)建臨時DIB Call (x2 x1, y2 y1) Call (, x1, y1) 39?!獎?chuàng)建回調(diào)函數(shù) m_OldWindowProc = SetWindowLong(, GWL_WNDPROC, AddressOf pvWindowProc)End Sub(2)pvWindowProc函數(shù),回調(diào)函數(shù);Private Function pvWindowProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case wMsg Case WM_MOUSEWHEEL 39。計算飽和度 39。—刪除原始文件 On Error Resume Next Kill sFilename On Error GoTo 0 39。5 cDIBPal類模塊cDIBPal類主要進行創(chuàng)建各種調(diào)色板。代碼省略,詳細代碼請參見光盤 (5)Emboss濾鏡39。判斷剪貼板是否為空 dsk_hWnd = GetDesktopWindow dsk_hDC = GetDC(dsk_hWnd) clp_hDC = CreateCompatibleDC(dsk_hDC