【正文】
GB值即可。(8)圖像波浪效果與圖像的扭曲類似,在處理此類問題的時候一般用反向求取法,即假如對一幅經(jīng)過波浪處理過的圖像上的一個像素點Pixels[i, j],通過坐標的反變換,我們可以求出這個點所對應的是原始位圖上的哪一個點,求出原始圖上該點的坐標,例如波浪處理過的圖像上的一點為Pixels[XSrc,YSrc],而經(jīng)過坐標反變換后得到對應的點為Pixels[i,j],則只需Pixels[i, j]=Pixels[XSrc,YSrc],就實現(xiàn)像素點的顏色賦值。微分運算可用來求信號的變化率,因而具有加強高頻分量的作用。要求得正確的圖像信息則必須消除噪聲。一般的鄰域有四點鄰域和八點鄰域,八點鄰域效果要好于四點鄰域,和銳化一樣,采用模板來編制程序。(14)邊緣檢測我們給出一個模板和一幅圖像,進行模板操作后的結(jié)果如下:不難發(fā)現(xiàn)原圖中左邊暗,右邊亮,中間存在著一條明顯的邊界,第三四列比其他列的灰度值高很多,人眼觀察時,就能發(fā)現(xiàn)一條很明顯的亮邊,其他區(qū)域都很暗,這樣就起到了邊沿檢測的目的。有兩個,一個是檢測水平邊沿的即,一個是檢測垂直平邊沿的即。要注意的是,我們處理的雖然是二值圖,但實際上是256級灰度圖,不過只用到了0和255兩種顏色。在該類中利用了大量的API函數(shù),在編程原理中已經(jīng)有介紹,這里就不再介紹了。—設置背景顏色 Call SetRect(tRect, 0, 0, NewWidth, NewHeight) hBrush = CreateSolidBrush(BackColor) Call FillRect(m_hDC, tRect, hBrush) Call DeleteObject(hBrush) Else Call End If End If 39。創(chuàng)建DIB lhDC = CreateCompatibleDC(0) If (lhDC 0) Then lhOldBmp = SelectObject(lhDC, ) 39。 刪除設備描述表 Call DeleteDC(clp_hDC) End If End If 39。(1)Blur濾鏡39。代碼省略,詳細代碼請參見光盤 (7)Negative濾鏡39。代碼省略,詳細代碼請參見光盤 (15)Scanlines濾鏡39。6.cDIBSave類模塊cDIBSave類用于保存圖像數(shù)據(jù)?!獎?chuàng)建保存圖像數(shù)據(jù)數(shù)組 ReDim aBI(1 To 40 + IIf(BPP = 8, 4 * (2 ^ BPP), 0)) Call CopyMemory(aBI(1), tBIH, 40) 39。該類的代碼省略,請讀者參考光盤詳細代碼。帶預覽功能的文件選擇對話框界面請參考21小節(jié)。—彩色模式 Else If (L = ) Then S = (Max Min) / (Max + Min) Else S = (Max Min) / (2 Max Min) End If 39。該模塊的代碼省略,請讀者參考光盤詳細代碼。向上滾動 Call (0) 39?!@得選取的坐標 Call (x1, y1, x2, y2) 39?!∠x取 Call Call End SelectEnd Sub當通過系統(tǒng)打開一副圖像后,通過工具欄或者菜單“Edit224。圖1617 ucInfo控件19.ucProgress控件ucProgress控件用于顯示正在處理圖像的進程。Open”,會彈出圖像選擇框,如圖1619所示。*.png。Texturize”,可以彈出該窗體,其界面如圖1622所示。fProperties窗體的代碼省略,請讀者參考光盤詳細代碼。全景運行的界面如圖1626所示。該窗體名稱為fFilter,通過菜單“Adjust224。該濾鏡窗體,選擇不同的濾鏡,其界面會根據(jù)該濾鏡的需要,顯示不同的選項。隨著圖像的進一步放大,紅色的方框會越來越小。Print】,可以彈出打印圖像的窗體,如圖1625所示。22.更改圖像大小的窗體在主窗體中,通過菜單“Edit224。本系統(tǒng)能夠在各種常用的圖像格式之間進行轉(zhuǎn)換。其設計界面如圖1620所示。 該類的代碼省略,請讀者參考光盤詳細代碼。如圖1616所示?!淖兇笮。缓髮斍皥D像更改為被剪切的圖像 Call (x2 x1, y2 y1) Call () 39。縮小 End Select End If End With End Select pvWindowProc = CallWindowProc(m_OldWindowProc, hWnd, wMsg, wParam, lParam)End Function17.ucCanvas控件ucCanvas為自定義開發(fā)控件,用來作為顯示和處理圖像的容器。該類的代碼省略,請讀者參考光盤詳細代碼。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。該模塊的代碼省略,請讀者參考光盤詳細代碼。該模塊的代碼省略,請讀者參考光盤詳細代碼。 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。 14 bytes Dim tBIH As BITMAPINFOHEADER 39。代碼省略,詳細代碼請參見光盤 (17)Shift濾鏡39。代碼省略,詳細代碼請參見光盤 (9)Outline濾鏡39。由于篇幅限制,大部分的濾鏡效果圖,沒有貼在書上,讀者可以自己測試。代碼省略3.cDIBDither類模塊cDIBDither類主要進行圖像顏色的處理,如將圖像進行二值化處理、轉(zhuǎn)化成灰度圖調(diào)色板、轉(zhuǎn)換成彩色調(diào)色板等?!d入調(diào)色板 If ( = 8) Then 39。通常在創(chuàng)建一個新的位圖、或者對一個圖像進行旋轉(zhuǎn)、鏡像等處理時,都需要創(chuàng)建DIB位圖。 (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。 實例實現(xiàn)本系統(tǒng)功能比較強大,因此包含了大量的文件,下面列出一些重點的文件:(1),該文件為系統(tǒng)的主界面,由菜單和工具欄組成 ;(2),該文件為圖像打印設置窗體;(3),該文件為圖像材質(zhì)編輯窗體;(4),該文件為圖像縮放設置窗體;(6),該文件為圖像屬性顯示窗體;(7),該文件為放大圖形時,快速查看目標圖像的窗體;(8),該文件用于對文件進行旋轉(zhuǎn)設置、以及進行水平和垂直鏡像;(9),該文件用于查看圖像應用各種濾鏡后的效果;(10),該文件為打開圖片時進行圖片預覽;(11),該文件為類模塊,用于進行圖像的基本操作;(12),該文件為類模塊,用于對圖像顏色進行各種操作;(13),該文件為類模塊,用于對圖像進行各種濾鏡操作;(14),該文件為類模塊,用于對圖像的模板進行處理; (15),該文件為類模塊,用于對將當前的圖像保存成其他文件格式;(16),該文件為類模塊,用于操作內(nèi)存中的圖像數(shù)據(jù);(17),該文件為基本模塊,用于進行系統(tǒng)的各種設置;(18),該文件為基本模塊,用于對鼠標的滾輪進行處理;(19),該文件為基本模塊,用于對文件進行處理;(20),該文件為基本模塊,用于讀寫INI文件;(21),該文件為基本模塊,用于進行HSL、RGB等顏色的轉(zhuǎn)換;(22),該文件為基本模塊,用于聲明各種GDI函數(shù)和變量;(23),該文件為基本模塊,用于創(chuàng)建打開圖像文件對話框,并且能夠進行圖像預覽;(24),該文件為基本模塊,用于選擇圖像中的文件;(25),該文件為基本模塊,用于選擇文件夾;(26),該文件為自定義控件,用于作為圖像的畫布;(27),該文件為自定義控件,用于顯示圖像處理的各種信息;(28),該文件為自定義控件,用于顯示圖像處理的進度;(29),該文件為自定義控件,用于顯示系統(tǒng)的工具欄。Sobel算子另一種形式是Isotropic Sobel算子,也有兩個,一個是檢測水平邊沿的即,一個是檢測豎直平邊沿的即。在灰度相近的區(qū)域內(nèi),這么做的結(jié)果使得該點的灰度值接近于0,而在邊界附近,灰度值有明顯的跳變,這么做的結(jié)果使得該點的灰度值很大,這樣就出現(xiàn)了上面的結(jié)果。把一個點的特定長度或形狀的鄰域稱作窗口,在一維的時候,中值濾波器是一個奇數(shù)個像素的滑動窗口,窗口正中間的值用窗口內(nèi)各個像素的中值代替。因此這種消除圖像的噪聲及滿足彩色復制特殊需要的方法,在圖像處理中稱為圖像平滑。由于常常無法事先確定輪廓的取向,因而挑選用于輪廓增強的微分算子時,必須選擇那些不具備空間方向性的和具有旋轉(zhuǎn)不變的線性微分算子。當H在[00,1200]時:當H在[1200,2400]時: 當H在[2400,3600]之間時:(10)圖像銳化在圖像系統(tǒng)中由于攝影系統(tǒng)的聚焦不良和信號傳輸系統(tǒng)信號頻帶過窄,造成圖像中目標輪廓的模糊是必然的。也就是通過平移后的像素點的位置返回去求出原始點的像素位置,這樣就存在一個問題:如果新圖中有一點(x1,y1),如果變化得到的(x0,y0)不在原圖中則把該點的RGB值統(tǒng)一設成白色(255,255,255),平移后的圖像沒有縮放,移出的部分被截斷。在一幅灰階圖像上,信號的差異是通過灰度(或亮度)的明暗來體現(xiàn)的,高對比度意思是圖像上兩個不同觀察點一個非常暗,另一個非常亮,而低對比度表示兩點的相對亮度差別較小,當在提高對比度時,圖像中的暗色調(diào)變得更暗,亮色區(qū)域變得更亮,而人眼在辯認一件事物時,更多地是從色彩的差錯對比中得出結(jié)論,因此更大的對比度會帶來更為醒目的效果。不同的灰度圖像,其灰度深度是存在差異的。方法二:求出每一個像素點R、G、B三個分量的最大值,然后把這個最大值賦給原來像素點的R、G、B三個分量。Private Declare Function StretchBlt Lib gdi32 (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long(11)SetStretchBltMode函數(shù)指定StretchBlt 和 StretchDIBits函數(shù)的伸縮模式。Private Declare Function SelectObject Lib gdi32 (ByVal hDC As Long, ByVal hObject As Long) As Long(8)DeleteObject函數(shù)刪除GDI對象,比如畫筆、刷子、字體、位圖、區(qū)域以及調(diào)色板等等。Private Declare Function DeleteDC Lib gdi32 (ByVal hDC As Long) As Long(5)GetObject函數(shù)取得對指定對象進行說明的一個結(jié)構(gòu)。省略代碼End Function因此如果在其他工程中引用了該控件,則可以同使用其他控件一樣使用這些定義的屬性和方法,如下所示:ucInfo. TextFile=hellomyText= ucInfo. TextFile(LoadRes