国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:51:23
字體:
來源:轉載
供稿:網友

推薦:關于利用C#遠程存取Access數據庫
目前,基于數據庫服務器的桌面管理程序和Web程序已經有太多的應用了,尤其是網絡的大量普及,孤立地數據庫管理系統無法勝任分布式管理應用,但是面對基于Access數據庫的現有的桌面應用我們也無法完全的摒棄。我們利用.Net 遠程處理功能將連接和存取Access的

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

這里首先要介紹一個類System.Drawing.Imaging.BitmapData,直接實例化這個類沒有用處,我們需要將一個Bitmap鎖定到內存中,來獲取一個BitmapData的實例。方法如下:

使用Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format)或者它的另一個重載Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData)來將圖像數據鎖定到內存中,以此來獲取一個與指定圖片相關聯的BitmapData實例。

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


       這些值與圖片像素的對應關系是這樣的:

 


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

Code
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凌源市| 凉山| 开江县| 汾阳市| 永吉县| 封丘县| 会昌县| 卢龙县| 固阳县| 兴宁市| 绥化市| 延津县| 丰都县| 昌宁县| 高安市| 普兰店市| 长丰县| 东安县| 亚东县| 焦作市| 竹北市| 修文县| 白银市| 和硕县| 保康县| 皋兰县| 榆树市| 磐安县| 夏津县| 永州市| 平安县| 哈巴河县| 陵川县| 呼玛县| 赤水市| 南乐县| 怀来县| 建宁县| 三穗县| 大港区| 陆河县|