程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# winform 把彩色圖片轉換為灰色的圖片,變灰,灰度圖片,速度很快,safe,unsafe,

c# winform 把彩色圖片轉換為灰色的圖片,變灰,灰度圖片,速度很快,safe,unsafe,

編輯:C#入門知識

c# winform 把彩色圖片轉換為灰色的圖片,變灰,灰度圖片,速度很快,safe,unsafe,


把彩色圖片轉換為灰色的圖片,直接用.net接口遍歷每個像素點轉換的效率非常低,800K的圖片65萬像素我的電腦要用5分鐘,而用了unsafe,速度提高了幾千倍,同樣的圖片只用了0.幾秒 

附一個常用的遍歷像素點轉換的代碼 

構造函數 

C#代碼  收藏代碼
  1. public Tphc()  
  2. {  
  3.     InitializeComponent();  
  4.     this.pictureBox1.ImageLocation = "F:\\黑色頭發.jpg";  
  5. }  



按鈕單擊事件 

C#代碼  收藏代碼
  1. private void button3_Click(object sender, EventArgs e)  
  2. {  
  3.     int Height = this.pictureBox1.Image.Height;  
  4.     int Width = this.pictureBox1.Image.Width;  
  5.     Bitmap bitmap = new Bitmap(Width, Height);  
  6.     Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image;  
  7.     Color pixel;  
  8.     for (int x = 0; x < Width; x++)  
  9.         for (int y = 0; y < Height; y++)  
  10.         {  
  11.             pixel = MyBitmap.GetPixel(x, y);  
  12.             int r, g, b, Result = 0;  
  13.             r = pixel.R;  
  14.             g = pixel.G;  
  15.             b = pixel.B;  
  16.             //實例程序以加權平均值法產生黑白圖像  
  17.             int iType = 2;  
  18.             switch (iType)  
  19.             {  
  20.                 case 0://平均值法  
  21.                     Result = ((r + g + b) / 3);  
  22.                     break;  
  23.                 case 1://最大值法  
  24.                     Result = r > g ? r : g;  
  25.                     Result = Result > b ? Result : b;  
  26.                     break;  
  27.                 case 2://加權平均值法  
  28.                     Result = ((int)(0.7 * r) + (int)(0.2 * g) + (int)(0.1 * b));  
  29.                     break;  
  30.             }  
  31.             bitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result));  
  32.         }  
  33.     this.pictureBox1.Image = bitmap;  
  34. }  



c語言中符號<<是什

左移運算符(<<)

將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。

例:a = a << 2 將a的二進制位左移2位,右補0,

左移1位後a = a * 2;

若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。
右移運算符(>>)

將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

操作數每右移一位,相當於該數除以2。

例如:a = a >> 2 將a的二進制位右移2位,

左補0 or 補1 得看被移數是正還是負。
 

c語言中符號<<是什

左移運算符(<<)

將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。

例:a = a << 2 將a的二進制位左移2位,右補0,

左移1位後a = a * 2;

若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。
右移運算符(>>)

將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

操作數每右移一位,相當於該數除以2。

例如:a = a >> 2 將a的二進制位右移2位,

左補0 or 補1 得看被移數是正還是負。
 

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