程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#指針進行圖像操作(1)

c#指針進行圖像操作(1)

編輯:關於C語言

提及.Net的指針操作,很多人並不是很了解,甚至還不知道有這麼個東東

由於C#的指針操作屬於unsafe操作,所以很多人對unsafe使用起來都很謹慎

其實所謂不安全代碼,其實是不受控於CLR控制下的托管執行,相當於CLR領導下的部分區域自治,

當然CLR也不會去關心不安全代碼的內存分配和回收

費話少說,先體驗一下適當的指針操作帶來的性能提升。

平時我們通過GDI+操作稍大點圖片象素時,都會有一種瀕臨崩潰的感覺,我們轉下用指針操作

1   Bitmap map = new Bitmap(path);
2   // 將圖片位圖區域進行鎖定
3   BitmapData mapdata = map.LockBits(new Rectangle(0, 0, map.Width, map.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
4   unsafe
5   {
6       byte* pixpoint;
7       int newpoint;
8 
9       for (int i = 0; i < map.Width; i++)
10       {
11           for (int j = 0; j < map.Height; j++)
12           {
13               // 位圖結構存在一個字節對齊問題。      
14               pixpoint = (byte*)mapdata.Scan0; +i * 3 + j * mapdata.Stride;
15               newpoint = (*pixpoint * 11 + *(pixpoint + 1) * 59 + *(pixpoint + 2) * 30) / 100;
16               *(pixpoint++) = (byte)newpoint;
17               *(pixpoint++) = (byte)newpoint;
18               *(pixpoint++) = (byte)newpoint;
19 
20               //  非指針操作
21               //  Color pxcl=map.GetPixel(i, j);
22               // map.SetPixel(i, j, (pxcl.R * 11 + pxcl.G * 59 + pxcl * 30) / 100);
23           }
24       }
25   }
26   // 將位圖內存區域進行解鎖
27   map.UnlockBits(mapdata);
28   map.Dispose();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved