解析.Net中圖片的快速處理_.Net教程
推薦:關于利用C#遠程存取Access數(shù)據(jù)庫目前,基于數(shù)據(jù)庫服務器的桌面管理程序和Web程序已經(jīng)有太多的應用了,尤其是網(wǎng)絡的大量普及,孤立地數(shù)據(jù)庫管理系統(tǒng)無法勝任分布式管理應用,但是面對基于Access數(shù)據(jù)庫的現(xiàn)有的桌面應用我們也無法完全的摒棄。我們利用.Net 遠程處理功能將連接和存取Access的
在圖片處理過程中,我們經(jīng)常需要對圖片逐像素進行處理,比如為了使圖片某一向量的顏色加深或者減淡,或者為了使圖像變化成黑白顏色,這個時候我們需要取出每個點上的像素進行計算,再賦值到圖像指定的位置。在.Net中,官方提供了Image.GetPixel(int x, int y)的方法供開發(fā)人員獲取指定位置的像素,同時提供了Image.SetPixel(int x, int y, Color color)的方法來給指定位置的像素賦值。但是這個方法性能很差,假設存在一張1024*768的圖片,逐像素操作并予以緩存的話亦至少需要1027*768次GetPixel和SetPixel,處理速度將慢到無法忍受。因此本方案將使用對內(nèi)存直接讀取和賦值的方式來提高圖片處理的速度。
這里首先要介紹一個類System.Drawing.Imaging.BitmapData,直接實例化這個類沒有用處,我們需要將一個Bitmap鎖定到內(nèi)存中,來獲取一個BitmapData的實例。方法如下:
使用Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format)或者它的另一個重載Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData)來將圖像數(shù)據(jù)鎖定到內(nèi)存中,以此來獲取一個與指定圖片相關聯(lián)的BitmapData實例。
在BitmapData中有一個重要的屬性Scan0,它是一個指針,指向了圖片數(shù)據(jù)所在內(nèi)存的第一個位置。使用內(nèi)存跟蹤,將Scan0的值填入地址中,可以看到內(nèi)存的分配情況(Format32bppArgb顏色深度):
這些值與圖片像素的對應關系是這樣的:
現(xiàn)在我們可以使用System.Runtime.InteropServices.Marshal.WriteByte(IntPtr ptr, byte val)的方法來更改指定位置的像素值了,修改后只要再調(diào)用一次Bitmap.UnlockBits(BitmapData bitmapdata)來解鎖內(nèi)存就可以了,例如:
此示例將圖片上所有像素的Red向量設置為255。運行此實例可以看到圖片變色了。
每次調(diào)用System.Runtime.InteropServices.Marshal.WriteByte(IntPtr ptr, byte val)的方法并不方便,因此我們構造一個ColorBgra類用來儲存這4個顏色向量,它的主要代碼是這樣的(參考自Paint.Net提供的源碼):
使用這個類在聲明為unsafe的上下文中就可以通過計算偏移量的辦法尋址找到指定位置像素的地址(指針),例如在Format32bppArgb顏色深度的圖片中可以這樣計算:
將計算返回的指針賦給ColorBgra*。之后使用如下方法:
{
return y * 4 + x;
}
直接把值寫入內(nèi)存中,實現(xiàn)對圖片像素的快速操作。
color ->G = i;
color ->R = i;
color ->A = i;
分享:談.NET 環(huán)境下使用C# 防止SQL注入式攻擊在.NET環(huán)境下使用C#防止SQL注入式攻擊,我們的解決方式是: 1、首先在UI錄入時,要控制數(shù)據(jù)的類型和長度、防止SQL注入式攻擊,系統(tǒng)提供檢測注入式攻擊的函數(shù),一旦檢測出注入式攻擊,該數(shù)據(jù)即不能提交; 2、業(yè)務邏輯層控制,通過在方法內(nèi)部將SQL關鍵字用一定
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實例(可帶附件)
- js實現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進度條的實現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現(xiàn)分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-解析.Net中圖片的快速處理。