這問題有點籠統,軟糖來說說把:

成都創新互聯專注于漢陰網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供漢陰營銷型網站建設,漢陰網站制作、漢陰網頁設計、漢陰網站官網定制、小程序開發服務,打造漢陰網絡公司原創品牌,更為您提供漢陰網站排名全網營銷落地服務。
圖像處理由System.Drawing命名空間負責。
主要是Bitmap類和Graphics類。
Bitmap表示一個位圖,可以是BMP,JPG,PNG等文件。
裝載位圖
Dim?位圖?As?Bitmap?=?Bitmap.FromFile("C:\Image1.PNG")
Graphics表示一張畫紙,能夠進行繪制操作。
它可以被窗體、控件、位圖調用CreateGraphics()方法來創建。
然后調用Graphics.Draw開頭的一系列函數來繪制圖像和圖形,Fill開頭的填充圖形。
創建畫紙并繪制位圖
Dim?畫紙?As?Graphics?=?Me.CreateGraphics()
畫紙.DrawImage(位圖,?100,?100,?256,?256)
可以將上面三行放到Form1_Load中測試,把路徑改一下,
還可以把Me改為能在上面繪圖的控件的名稱。
更多內容請看MSDN的System.Drawing命名空間。
如滿意,請采納,謝謝。
首先,還是談談圖像像素時數據獲取方面吧,點虐 中的圖像相關類基本上都是基于GDI+的,因此,圖像數據的獲取其實也是調用GDI+的一些函數。這個函數就是LockBits,在vb點虐 中彩色圖像數據的快速獲取 一文中,我們是調用了Marshal.Copy把LockBits鎖定的內存數據拷貝到數據中,然后對數組中的值進行處理。這樣做主要的原因是VB.NET不好直接訪問內存(Marshal.ReadByte之類的函數不適合用于大型的循環中)。那么,這就造成了2個不好的事情,第一:在同一時間需要2倍于圖像數據量的內存,第二:內存數據拷貝到數據,以及處理后再把數組的數據拷貝會內存中都是會減低速度的。作為一種改進,我們應該充分利用LockBits的功能。LockBits中的LockMode中有一種模式為ImageLockMode.UserInputBuffer,該模式下需要用戶先申請內存,然后在把圖像數據按照相關格式填充如這個內存中。這樣,就可以先定義個數組,然后把圖像數據填充到這個數組中,就避免了來回拷貝的耗時了,簡單示例代碼如下:
Dim BmpData As New BitmapData
Stride = ((Bmp.Width * 3 + 3) And HFFFFFFFC)
Dim PixleValue(Stride * Bmp.Height) As Byte
Dim Hanlde As GCHandle = GCHandle.Alloc(PixleValue, GCHandleType.Pinned)
BmpData.Scan0 = Hanlde.AddrOfPinnedObject()
Imports?System
Imports?System.Drawing
Imports?System.Drawing.Imaging
Imports?System.Runtime.InteropServices
'''?summary
'''?Summary?description?for?TextShadow
'''?/summary
'''?remarks/remarks
Public?Class?gaoshiBLUR
Public?newbmp?As?Bitmap
StructLayout(LayoutKind.Explicit)?Structure?rgbA
FieldOffset(0)?Public?R?As?Byte
FieldOffset(1)?Public?G?As?Byte
FieldOffset(2)?Public?B?As?Byte
FieldOffset(3)?Public?A?As?Byte
FieldOffset(0)?Public?col?As?Integer
End?Structure
Private?m_radius?As?Integer?=?5
'''?summary
'''?高斯卷積矩陣
'''?/summary
'''?remarks/remarks
Private?gaussMatrix?As?Integer()
'''?summary
'''?卷積核
'''?/summary
'''?remarks/remarks
Private?nuclear?As?Integer?=?0
'''?summary
'''?模糊半徑
'''?/summary
'''?value/value
'''?returns/returns
'''?remarks/remarks
Public?Property?Radius()?As?Integer
Get
Return?m_radius
End?Get
Set(ByVal?Value?As?Integer)
If?(m_radius??Value)?Then
m_radius?=?Value
MakeGaussMatrix()
End?If
End?Set
End?Property
'''?summary
'''?高斯模糊
'''?/summary
'''?param?name="bmp"要處理的圖像/param
'''?remarks/remarks
Public?Sub?MaskShadow(ByVal?bmp?As?Bitmap)
If?nuclear?=?0?Then?MakeGaussMatrix()
Dim?rt?As?Rectangle?=?New?Rectangle(0,?0,?bmp.Width,?bmp.Height)
'?克隆臨時位圖,作為卷積源
Dim?tmp?As?Bitmap?=?bmp.Clone()
Dim?dest?As?BitmapData?=?bmp.LockBits(rt,?ImageLockMode.WriteOnly,?PixelFormat.Format32bppArgb)
Dim?source?As?BitmapData?=?tmp.LockBits(rt,?ImageLockMode.ReadOnly,?PixelFormat.Format32bppArgb)
Debug.Print(Radius)
Debug.Print(dest.Width.ToString)
Debug.Print(nuclear)
Dim?Number?As?Integer?=?(bmp.Height?*?dest.Stride?-?1)?/?4???'?圖像數據元素的個數,注意點虐 中數組下標是從0開始的
Dim?bmpdata(Number)?As?Integer
Dim?tmpdata(Number)?As?Integer
Dim?TMPrgb(Number)?As?rgbA?'臨時參考顏色
Dim?BMPrgb(Number)?As?rgbA?'計算結果后的顏色
'ReDim?bmpdata(Number)
'ReDim?TMPrgb(Number)
Marshal.Copy(source.Scan0,?tmpdata,?0,?Number)
Dim?i?As?Long
Dim?j?As?Long
j?=?Number
Dim?w,?h?As?Long
Dim?yi,?xi?As?Long
Dim?iw,?ih,?iiw,?iih,?iii?As?Long
Dim?k?As?Long
Dim?nn?As?Integer?=?(Radius?*?2?+?1)?^?2
Dim?n?As?Integer?=?Radius?*?2?+?1
w?=?bmp.Width
h?=?bmp.Height
'?System.Array.Copy(TMPrgb,?tmpdata,?j)
For?i?=?0?To?j
TMPrgb(i).col?=?tmpdata(i)
Next?i
i?=?0
For?i?=?0?To?j
ih?=?Int(i?/?w)
iw?=?i?-?ih?*?w
Dim?r?As?Double?=?0
Dim?g?As?Double?=?0
Dim?b?As?Double?=?0
Dim?a?As?Double?=?0
Dim?weight?As?Double
For?k?=?0?To?nn
'需要解決的是周邊遍歷顏色值然后相加(r=r1*weight1+r2*weight2+r3*weight3+r4*weight4+r5*weight5+...r*weight)
yi?=?Int(k?/?n)
xi?=?k?-?yi?*?n
yi?-=?Radius
xi?-=?Radius
iiw?=?iw?+?xi
iih?=?ih?+?yi
'yi?=?Int(k?/?n)
'xi?=?k?-?yi?*?n
'iih?=?ih?+?yi?-?Radius
'iiw?=?iw?+?xi?-?Radius
If?(iiw??0?OrElse?iih??0)?Or?(iiw??w?-?1?OrElse?iih??h?-?1)?Then
iiw?=?iw
iih?=?ih
iii?=?i
Else
iii?=?iih?*?w
iii?+=?iiw
End?If
weight?=?gaussMatrix(k)?/?1000
r?+=?TMPrgb(iii).R?*?weight
g?+=?TMPrgb(iii).G?*?weight
b?+=?TMPrgb(iii).B?*?weight
a?+=?TMPrgb(iii).A?*?weight
Next
'TMPrgb(i).col?=?tmpdata(i)
'r?=?TMPrgb(i).R?*?weight
'g?=?TMPrgb(i).G?*?weight
'b?=?TMPrgb(i).B?*?weight
BMPrgb(i).R?=?IIf(r??255,?255,?r)
BMPrgb(i).G?=?IIf(g??255,?255,?g)
BMPrgb(i).B?=?IIf(b??255,?255,?b)
BMPrgb(i).A?=?IIf(a??255,?255,?a)
bmpdata(i)?=?BMPrgb(i).col
'Debug.Print(TMPrgb(i).R)
Next
Marshal.Copy(bmpdata,?0,?dest.Scan0,?Number)
tmp.UnlockBits(source)
bmp.UnlockBits(dest)
newbmp?=?bmp.Clone
tmp.Dispose()
'?End?Try
End?Sub
'''?summary
'''?高斯卷積矩陣
'''?/summary
'''?remarks/remarks
Protected?Sub?MakeGaussMatrix()
Dim?Q?As?Double?=?Radius?/?2
If?(Q?=?0.0)?Then?Q?=?0.1
Dim?n?As?Integer?=?Radius?*?2?+?1
Dim?index?As?Integer?=?0
nuclear?=?0
ReDim?gaussMatrix(n?*?n)
Dim?x?As?Integer
Dim?y?As?Integer
For?x?=?-Radius?To?Radius
For?y?=?-Radius?To?Radius
gaussMatrix(index)?=?Math.Round(Math.Exp(-((x?*?x?+?y?*?y))?/?(2.0?*?Q?*?Q))?/?(2.0?*?Math.PI?*?Q?*?Q)?*?1000.0)
nuclear?+=?gaussMatrix(index)
index?+=?1
Next
Next
End?Sub
End?Class
使用方法.
Dim?bmp?As?Bitmap?=?PictureBox1.Image.Clone
Dim?x?As?New?gaoshiBLUR
x.Radius?=?30
x.MaskShadow(bmp)
PictureBox2.Image?=?x.newbmp.Clone
分享名稱:vb點虐
圖像處理 vb做圖像處理
分享網址:http://www.js-pz168.com/article4/ddjosie.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、虛擬主機、品牌網站建設、關鍵詞優化、云服務器、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯