Học tập‎ > ‎C#‎ > ‎

Xử lý ảnh trong C#: Thay đổi độ tương phản (contrast)

 Giá trị của độ tương phải giao động từ -100 đến 100. 
Bây giờ chúng ta tính toán giá trị độ tương phản với công thức: ((100+độ tương phản)/100)2 . Sau đó, với mỗi điểm ảnh chúng ta lấy giá trị của các thành phần và chia cho 255 để nhận được giá trị nằm trong khoảng từ 0 - 1. Sau đó trừ đi 0.5.
Nếu kết quả là âm thì độ tương phản sẽ giảm và ngược lại.
Sau đó chúng ta cọng lại 0.5 và đổi giá trị trở về giá trị nằm trong khoảng 0-255.
Cuối cùng chúng ta set lại giá trị màu của điểm ảnh:

  1. public void ApplyContrast(double contrast)  
  2. {  
  3.     double A, R, G, B;  
  4.   
  5.     Color pixelColor;  
  6.   
  7.     contrast = (100.0 + contrast) / 100.0;  
  8.     contrast *= contrast;  
  9.   
  10.     for (int y = 0; y < bitmapImage.Height; y++)  
  11.     {  
  12.         for (int x = 0; x < bitmapImage.Width; x++)  
  13.         {  
  14.             pixelColor = bitmapImage.GetPixel(x, y);  
  15.             A = pixelColor.A;  
  16.   
  17.             R = pixelColor.R / 255.0;  
  18.             R -= 0.5;  
  19.             R *= contrast;  
  20.             R += 0.5;  
  21.             R *= 255;  
  22.                
  23.             if (R > 255)  
  24.             {  
  25.                 R = 255;  
  26.             }  
  27.             else if (R < 0)  
  28.             {  
  29.                 R = 0;  
  30.             }  
  31.   
  32.             G = pixelColor.G / 255.0;  
  33.             G -= 0.5;  
  34.             G *= contrast;  
  35.             G += 0.5;  
  36.             G *= 255;  
  37.             if (G > 255)  
  38.             {  
  39.                 G = 255;  
  40.             }  
  41.             else if (G < 0)  
  42.             {  
  43.                 G = 0;  
  44.             }  
  45.   
  46.             B = pixelColor.B / 255.0;  
  47.             B -= 0.5;  
  48.             B *= contrast;  
  49.             B += 0.5;  
  50.             B *= 255;  
  51.             if (B > 255)  
  52.             {  
  53.                 B = 255;  
  54.             }  
  55.             else if (B < 0)  
  56.             {  
  57.                 B = 0;  
  58.             }  
  59.   
  60.             bitmapImage.SetPixel(x, y, Color.FromArgb((int)A, (int)R, (int)G, (int)B));  
  61.         }  
  62.     }  
  63.   
  64. }  


Increasing the contrast by 50

Hình ảnh được tăng độ tương phản lên 50


dịch từ: http://www.smokycogs.com

Comments