首先,還是談?wù)剤D像像素時(shí)數(shù)據(jù)獲取方面吧,.net中的圖像相關(guān)類基本上都是基于GDI+的,因此,圖像數(shù)據(jù)的獲取其實(shí)也是調(diào)用GDI+的一些函數(shù)。這個(gè)函數(shù)就是LockBits,在vb.net中彩色圖像數(shù)據(jù)的快速獲取 一文中,我們是調(diào)用了Marshal.Copy把LockBits鎖定的內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù)中,然后對(duì)數(shù)組中的值進(jìn)行處理。這樣做主要的原因是VB.NET不好直接訪問內(nèi)存(Marshal.ReadByte之類的函數(shù)不適合用于大型的循環(huán)中)。那么,這就造成了2個(gè)不好的事情,第一:在同一時(shí)間需要2倍于圖像數(shù)據(jù)量的內(nèi)存,第二:內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù),以及處理后再把數(shù)組的數(shù)據(jù)拷貝會(huì)內(nèi)存中都是會(huì)減低速度的。作為一種改進(jìn),我們應(yīng)該充分利用LockBits的功能。LockBits中的LockMode中有一種模式為ImageLockMode.UserInputBuffer,該模式下需要用戶先申請(qǐng)內(nèi)存,然后在把圖像數(shù)據(jù)按照相關(guān)格式填充如這個(gè)內(nèi)存中。這樣,就可以先定義個(gè)數(shù)組,然后把圖像數(shù)據(jù)填充到這個(gè)數(shù)組中,就避免了來(lái)回拷貝的耗時(shí)了,簡(jiǎn)單示例代碼如下:

創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)新干,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792
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()
在我的XP+VB2010環(huán)境下,測(cè)試U盤插入拔出,沒有問題:
Private WM_DEVICECHANGE As Integer = H219
Public Enum WM_DEVICECHANGE_WPPARAMS As Integer
DBT_CONFIGCHANGECANCELED = H19
DBT_CONFIGCHANGED = H18
DBT_CUSTOMEVENT = H8006
DBT_DEVICEARRIVAL = H8000
DBT_DEVICEQUERYREMOVE = H8001
DBT_DEVICEQUERYREMOVEFAILED = H8002
DBT_DEVICEREMOVECOMPLETE = H8004
DBT_DEVICEREMOVEPENDING = H8003
DBT_DEVICETYPESPECIFIC = H8005
DBT_DEVNODES_CHANGED = H7
DBT_QUERYCHANGECONFIG = H17
DBT_USERDEFINED = HFFFF
End Enum
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_DEVICECHANGE Then
Select Case m.WParam
Case WM_DEVICECHANGE_WPPARAMS.DBT_DEVICEARRIVAL
MsgBox("USB device is just plugged in!")
Case WM_DEVICECHANGE_WPPARAMS.DBT_DEVICEREMOVECOMPLETE
MsgBox("USB device is just taken out")
End Select
End If
MyBase.WndProc(m)
End Sub
val是Long型的,可能是很大的數(shù)。
val and HFFFF取它的低2字節(jié),即把mSeed的取值限制在0到HFFFF(十進(jìn)制為65535)之間。
補(bǔ)充:能把你測(cè)試的代碼發(fā)一下嗎?你是改的val進(jìn)行測(cè)試還是直接改的mSeed?
僅從代碼上看,這句的意思就是和我們回答的一樣,取val的低2字節(jié)(0~65535)放入mSeed。不知道你的完整加密代碼是什么樣的,有可能加密算法對(duì)mSeed的取值范圍有要求,因此是必須加上的。
至于為什么測(cè)試結(jié)果與我們的答案不同,我現(xiàn)在不方便自己開VB進(jìn)行測(cè)試,希望你能提供測(cè)試代碼再來(lái)確定最終的原因是什么。
文章題目:vb.nethffff的簡(jiǎn)單介紹
文章源于:http://chinadenli.net/article48/dsipjep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站營(yíng)銷、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)