【正文】
fPrint窗體的代碼省略,請讀者參考光盤詳細代碼。全景運行的界面如圖1626所示。 該窗體中使用了大量的API函數(shù)來實現(xiàn)該功能。該窗體名稱為fFilter,通過菜單“Adjust224。 圖1627 濾鏡預(yù)覽窗體 圖1628 濾鏡選擇框關(guān)于數(shù)字圖像處理系統(tǒng)的核心功能和代碼,就介紹到此。該濾鏡窗體,選擇不同的濾鏡,其界面會根據(jù)該濾鏡的需要,顯示不同的選項。26.濾鏡效果查看窗體本系統(tǒng)提供了很多的濾鏡效果,通過主窗體的“Filter”菜單和“Adjust”菜單,可以對圖像進行多種圖像的濾鏡處理。隨著圖像的進一步放大,紅色的方框會越來越小。Panoramic”可以進入到圖像全景窗體。Print】,可以彈出打印圖像的窗體,如圖1625所示。23.顯示圖像信息的窗體在主主窗體中,單擊菜單【View224。22.更改圖像大小的窗體在主窗體中,通過菜單“Edit224。在主界面中,通過菜單“Filter224。本系統(tǒng)能夠在各種常用的圖像格式之間進行轉(zhuǎn)換。*.gif。其設(shè)計界面如圖1620所示。該控件的代碼省略,請讀者參考光盤詳細代碼。 該類的代碼省略,請讀者參考光盤詳細代碼。其界面如圖1617所示。如圖1616所示。—創(chuàng)建臨時DIB Call (x2 x1, y2 y1) Call (, x1, y1) 39?!淖兇笮。缓髮斍皥D像更改為被剪切的圖像 Call (x2 x1, y2 y1) Call () 39。Private Sub mnuCrop_Click(Index As Integer) Dim TmpDIB As New cDIB Dim x1 As Long, y1 As Long Dim x2 As Long, y2 As Long Select Case Index Case 0 39??s小 End Select End If End With End Select pvWindowProc = CallWindowProc(m_OldWindowProc, hWnd, wMsg, wParam, lParam)End Function17.ucCanvas控件ucCanvas為自定義開發(fā)控件,用來作為顯示和處理圖像的容器。—創(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。該類的代碼省略,請讀者參考光盤詳細代碼。代碼省略,詳細代碼請參見光盤 14.mMisc模塊mMisc用于聲明一些系統(tǒng)中常用的函數(shù)。Public Sub HSLtoRGB(ByVal H As Single, ByVal S As Single, ByVal L As Single, R As Byte, G As Byte, B As Byte)39。計算飽和度 39。該模塊的代碼省略,請讀者參考光盤詳細代碼。圖1615 顏色選擇對話框10.mDialogEx模塊mDialogEx類主要用于創(chuàng)建帶圖像預(yù)覽功能的文件選擇對話框。該模塊的代碼省略,請讀者參考光盤詳細代碼。—刪除原始文件 On Error Resume Next Kill sFilename On Error GoTo 0 39。 Palette table/Indexes For lIdx = 0 To (2 ^ BPP) 1 aBI(lIdx * 4 + 41) = (lIdx) aBI(lIdx * 4 + 42) = (lIdx) aBI(lIdx * 4 + 43) = (lIdx) Next lIdx End If 39。H4D42 .bfSize = Len(tBIH) + IIf(BPP = 8, 4 * (2 ^ BPP), 0) + Walg * .bfOffBits = Len(tBFH) + Len(tBIH) + IIf(BPP = 8,4 *(2 ^ BPP), 0) End With 39。 14 bytes Dim tBIH As BITMAPINFOHEADER 39。5 cDIBPal類模塊cDIBPal類主要進行創(chuàng)建各種調(diào)色板。代碼省略,詳細代碼請參見光盤 (17)Shift濾鏡39。代碼省略,詳細代碼請參見光盤 (13)ReplaceL濾鏡39。代碼省略,詳細代碼請參見光盤 (9)Outline濾鏡39。代碼省略,詳細代碼請參見光盤 (5)Emboss濾鏡39。由于篇幅限制,大部分的濾鏡效果圖,沒有貼在書上,讀者可以自己測試。下面將介紹部分重要濾鏡的代碼實現(xiàn)。代碼省略3.cDIBDither類模塊cDIBDither類主要進行圖像顏色的處理,如將圖像進行二值化處理、轉(zhuǎn)化成灰度圖調(diào)色板、轉(zhuǎn)換成彩色調(diào)色板等。判斷剪貼板是否為空 dsk_hWnd = GetDesktopWindow dsk_hDC = GetDC(dsk_hWnd) clp_hDC = CreateCompatibleDC(dsk_hDC) If (clp_hDC 0) Then clp_hObj = CreateCompatibleBitmap(dsk_hDC, , m_tBIH. biHeight) If (clp_hObj 0) Then clp_hOldObj = SelectObject(clp_hDC, clp_hObj) Call (clp_hDC) Call SelectObject(clp_hDC, clp_hOldObj) 39。—載入調(diào)色板 If ( = 8) Then 39。如果圖像不為空 If (GetObjectType(Picture) = OBJ_BITMAP) Then 39。通常在創(chuàng)建一個新的位圖、或者對一個圖像進行旋轉(zhuǎn)、鏡像等處理時,都需要創(chuàng)建DIB位圖?!獎?chuàng)建DIB m_hDIB = CreateDIBSection(m_hDC, m_tBIH, DIB_RGB_COLORS,m_lpBits,0, 0) If (m_hDIB 0) Then 39。 (1)Create函數(shù),該函數(shù)創(chuàng)建一個位圖空間;Public Function Create(ByVal NewWidth As Long, ByVal NewHeight As Long, Optional ByVal BackColor As Long = vbBlack) As Boolean Dim tRect As RECT2 Dim hBrush As Long 39。 39。 實例實現(xiàn)本系統(tǒng)功能比較強大,因此包含了大量的文件,下面列出一些重點的文件:(1),該文件為系統(tǒng)的主界面,由菜單和工具欄組成 ;(2),該文件為圖像打印設(shè)置窗體;(3),該文件為圖像材質(zhì)編輯窗體;(4),該文件為圖像縮放設(shè)置窗體;(6),該文件為圖像屬性顯示窗體;(7),該文件為放大圖形時,快速查看目標圖像的窗體;(8),該文件用于對文件進行旋轉(zhuǎn)設(shè)置、以及進行水平和垂直鏡像;(9),該文件用于查看圖像應(yīng)用各種濾鏡后的效果;(10),該文件為打開圖片時進行圖片預(yù)覽;(11),該文件為類模塊,用于進行圖像的基本操作;(12),該文件為類模塊,用于對圖像顏色進行各種操作;(13),該文件為類模塊,用于對圖像進行各種濾鏡操作;(14),該文件為類模塊,用于對圖像的模板進行處理; (15),該文件為類模塊,用于對將當前的圖像保存成其他文件格式;(16),該文件為類模塊,用于操作內(nèi)存中的圖像數(shù)據(jù);(17),該文件為基本模塊,用于進行系統(tǒng)的各種設(shè)置;(18),該文件為基本模塊,用于對鼠標的滾輪進行處理;(19),該文件為基本模塊,用于對文件進行處理;(20),該文件為基本模塊,用于讀寫INI文件;(21),該文件為基本模塊,用于進行HSL、RGB等顏色的轉(zhuǎn)換;(22),該文件為基本模塊,用于聲明各種GDI函數(shù)和變量;(23),該文件為基本模塊,用于創(chuàng)建打開圖像文件對話框,并且能夠進行圖像預(yù)覽;(24),該文件為基本模塊,用于選擇圖像中的文件;(25),該文件為基本模塊,用于選擇文件夾;(26),該文件為自定義控件,用于作為圖像的畫布;(27),該文件為自定義控件,用于顯示圖像處理的各種信息;(28),該文件為自定義控件,用于顯示圖像處理的進度;(29),該文件為自定義控件,用于顯示系統(tǒng)的工具欄。常用的LOG算子是5*5的模板,即。Sobel算子另一種形式是Isotropic Sobel算子,也有兩個,一個是檢測水平邊沿的即,一個是檢測豎直平邊沿的即。常用的邊緣檢測算子有如下幾種。在灰度相近的區(qū)域內(nèi),這么做的結(jié)果使得該點的灰度值接近于0,而在邊界附近,灰度值有明顯的跳變,這么做的結(jié)果使得該點的灰度值很大,這樣就出現(xiàn)了上面的結(jié)果。它的原理很簡單:假設(shè)有一條與原點距離為s,方向角為θ的一條直線,如圖1612所示。把一個點的特定長度或形狀的鄰域稱作窗口,在一維的時候,中值濾波器是一個奇數(shù)個像素的滑動窗口,窗口正中間的值用窗口內(nèi)各個像素的中值代替。鄰域平均法是一種在空間域上對圖像進行平滑處理的最常用方法。因此這種消除圖像的噪聲及滿足彩色復(fù)制特殊需要的方法,在圖像處理中稱為圖像平滑。銳化的常用模板如下: , , (11)圖像平滑在輸入圖像的過程中,圖像可能存在各種寄生效應(yīng),如可能受到各種噪聲源的干擾,混入各種高頻噪聲。由于常常無法事先確定輪廓的取向,因而挑選用于輪廓增強的微分算子時,必須選擇那些不具備空間方向性的和具有旋轉(zhuǎn)不變的線性微分算子。在圖像中,邊緣是由灰度級和相鄰域點不同的像素點構(gòu)成的。當H在[00,1200]時:當H在[1200,2400]時: 當H在[2400,3600]之間時:(10)圖像銳化在圖像系統(tǒng)中由于攝影系統(tǒng)的聚焦不良和信號傳輸系統(tǒng)信號頻帶過窄,造成圖像中目標輪廓的模糊是必然的。為了得到更美觀的鏡像顯示效果,具體操作時不能先顯示一幅正常圖像,然后再顯示反面圖像,而需要兩個圖像時從交叉點向外顯示,這樣將形成特殊的屏幕效果。也就是通過平移后的像素點的位置返回去求出原始點的像素位置,這樣就存在一個問題:如果新圖中有一點(x1,y1),如果變化得到的(x0,y0)不在原圖中則把該點的RGB值統(tǒng)一設(shè)成白色(255,255,255),平移后的圖像沒有縮放,移出的部分被截斷。(4)圖像平移初始坐標為(x0,y0)的點經(jīng)過平移(tx,ty)(以向右,向下為正方向)后,坐標變?yōu)椋▁1,y1)。在一幅灰階圖像上,信號的差異是通過灰度(或亮度)的明暗來體現(xiàn)的,高對比度意思是圖像上兩個不同觀察點一個非常暗,另一個非常亮,而低對比度表示兩點的相對亮度差別較小,當在提高對比度時,圖像中的暗色調(diào)變得更暗,亮色區(qū)域變得更亮,而人眼在辯認一件事物時,更多地是從色彩的差錯對比中得出結(jié)論,因此更大的對比度會帶來更為醒目的效果。其中動態(tài)閾值法是一個變換方法,即在一個nn的子塊中,所有具有灰度級超過平均灰度值到255數(shù)據(jù)點變換1(即黑色),而另一些低于平均灰度值的數(shù)據(jù)點則變換到1(即白色)。不同的灰度圖像,其灰度深度是存在差異的。實際的位圖(Bitmap)中,0對應(yīng)于方法二:求出每一個像素點R、G、B三個分量的最大值,然后把這個最大值賦給原來像素點的R、G、B三個分量。它對類或私有設(shè)備場景無效Private Declare Function ReleaseDC Lib user32 (ByVal hWnd As Long, ByVal hDC As Long) As Long(21)OpenClipboard函數(shù)打開剪貼板Private Decla