日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

解析.Net中圖片的快速處理_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:關(guān)于利用C#遠(yuǎn)程存取Access數(shù)據(jù)庫(kù)
目前,基于數(shù)據(jù)庫(kù)服務(wù)器的桌面管理程序和Web程序已經(jīng)有太多的應(yīng)用了,尤其是網(wǎng)絡(luò)的大量普及,孤立地?cái)?shù)據(jù)庫(kù)管理系統(tǒng)無(wú)法勝任分布式管理應(yīng)用,但是面對(duì)基于Access數(shù)據(jù)庫(kù)的現(xiàn)有的桌面應(yīng)用我們也無(wú)法完全的摒棄。我們利用.Net 遠(yuǎn)程處理功能將連接和存取Access的

在圖片處理過(guò)程中,我們經(jīng)常需要對(duì)圖片逐像素進(jìn)行處理,比如為了使圖片某一向量的顏色加深或者減淡,或者為了使圖像變化成黑白顏色,這個(gè)時(shí)候我們需要取出每個(gè)點(diǎn)上的像素進(jìn)行計(jì)算,再賦值到圖像指定的位置。在.Net中,官方提供了Image.GetPixel(int x, int y)的方法供開發(fā)人員獲取指定位置的像素,同時(shí)提供了Image.SetPixel(int x, int y, Color color)的方法來(lái)給指定位置的像素賦值。但是這個(gè)方法性能很差,假設(shè)存在一張1024*768的圖片,逐像素操作并予以緩存的話亦至少需要1027*768次GetPixel和SetPixel,處理速度將慢到無(wú)法忍受。因此本方案將使用對(duì)內(nèi)存直接讀取和賦值的方式來(lái)提高圖片處理的速度。

這里首先要介紹一個(gè)類System.Drawing.Imaging.BitmapData,直接實(shí)例化這個(gè)類沒(méi)有用處,我們需要將一個(gè)Bitmap鎖定到內(nèi)存中,來(lái)獲取一個(gè)BitmapData的實(shí)例。方法如下:

使用Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format)或者它的另一個(gè)重載Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData)來(lái)將圖像數(shù)據(jù)鎖定到內(nèi)存中,以此來(lái)獲取一個(gè)與指定圖片相關(guān)聯(lián)的BitmapData實(shí)例。

在BitmapData中有一個(gè)重要的屬性Scan0,它是一個(gè)指針,指向了圖片數(shù)據(jù)所在內(nèi)存的第一個(gè)位置。使用內(nèi)存跟蹤,將Scan0的值填入地址中,可以看到內(nèi)存的分配情況(Format32bppArgb顏色深度):


       這些值與圖片像素的對(duì)應(yīng)關(guān)系是這樣的:

 


現(xiàn)在我們可以使用
System.Runtime.InteropServices.Marshal.WriteByte(IntPtr ptr, byte val)的方法來(lái)更改指定位置的像素值了,修改后只要再調(diào)用一次Bitmap.UnlockBits(BitmapData bitmapdata)來(lái)解鎖內(nèi)存就可以了,例如:
此示例將圖片上所有像素的Red向量設(shè)置為255。運(yùn)行此實(shí)例可以看到圖片變色了。

Code

 

每次調(diào)用System.Runtime.InteropServices.Marshal.WriteByte(IntPtr ptr, byte val)的方法并不方便,因此我們構(gòu)造一個(gè)ColorBgra類用來(lái)儲(chǔ)存這4個(gè)顏色向量,它的主要代碼是這樣的(參考自Paint.Net提供的源碼):

使用這個(gè)類在聲明為unsafe的上下文中就可以通過(guò)計(jì)算偏移量的辦法尋址找到指定位置像素的地址(指針),例如在Format32bppArgb顏色深度的圖片中可以這樣計(jì)算:

Code

 

將計(jì)算返回的指針賦給ColorBgra*。之后使用如下方法:

        public unsafe ColorBgra* GetPointAddress(int x, int y)
        {
            
return y * 4 + x;
        }

 

直接把值寫入內(nèi)存中,實(shí)現(xiàn)對(duì)圖片像素的快速操作。

                    color->= i;
                    color 
->= i;
                    color 
->= i;
                    color 
->= i;

 

分享:談.NET 環(huán)境下使用C# 防止SQL注入式攻擊
在.NET環(huán)境下使用C#防止SQL注入式攻擊,我們的解決方式是: 1、首先在UI錄入時(shí),要控制數(shù)據(jù)的類型和長(zhǎng)度、防止SQL注入式攻擊,系統(tǒng)提供檢測(cè)注入式攻擊的函數(shù),一旦檢測(cè)出注入式攻擊,該數(shù)據(jù)即不能提交; 2、業(yè)務(wù)邏輯層控制,通過(guò)在方法內(nèi)部將SQL關(guān)鍵字用一定

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2009-08-24
相關(guān).Net教程