首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 指標進行影像操作(一)

     編輯:關於C語言

提及 .NET 指標操作,很多人不太了解,甚至不知道有這個東西。由於 C# 指標操作屬於 unsafe,所以許多人使用時很謹慎。其實所謂不安全程式碼,是不受 CLR 控制的非託管執行,相當於 CLR 領導下的部分區域自治,CLR 也不會關心不安全程式碼的記憶體配置與回收。

廢話少說,先體驗適當指標操作帶來的效能提升。平時透過 GDI+ 操作稍大點圖片像素時,都有種瀕臨崩潰感覺,我們轉用指標操作:

Bitmap map = new Bitmap(path);
// 將圖片位圖區域鎖定
BitmapData mapdata = map.LockBits(new Rectangle(0, 0, map.Width, map.Height), 
    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
    byte* pixpoint;
    int newpoint;
    for (int i = 0; i < map.Width; i++)
    {
        for (int j = 0; j < map.Height; j++)
        {
            // 位圖結構存在位元組對齊問題
            pixpoint = (byte*)mapdata.Scan0 + i * 3 + j * mapdata.Stride;
            newpoint = (*pixpoint * 11 + *(pixpoint + 1) * 59 + *(pixpoint + 2) * 30) / 100;
            *(pixpoint++) = (byte)newpoint;
            *(pixpoint++) = (byte)newpoint;
            *(pixpoint++) = (byte)newpoint;
            // 非指標操作
            // Color pxcl = map.GetPixel(i, j);
            // map.SetPixel(i, j, (pxcl.R * 11 + pxcl.G * 59 + pxcl * 30) / 100);
        }
    }
}
// 解鎖位圖記憶體區域
map.UnlockBits(mapdata);
map.Dispose();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved