2013-10-23 4 views
0

그림 상자가 있고 이미지 색상을 세피아로 변경하고 싶습니다. 지금까지 그레이 스케일로 설정하는 방법을 알고 있었지만 마지막 부분은 내 몰락입니다. 내가 덕분에 많이그림 상자에서 이미지를 세피아로 변경하기

을 제공 한 의견에서 무엇을해야하는지 제시함으로써 나를 위해 세피아로 설정

답변

3
코드는 아래로 비등 할 수

:

private void button1_Click(object sender, EventArgs e) 
    { 
     Bitmap sepiaEffect = (Bitmap)pictureBox.Image.Clone(); 
     for (int yCoordinate = 0; yCoordinate < sepiaEffect.Height; yCoordinate++) 
     { 
      for (int xCoordinate = 0; xCoordinate < sepiaEffect.Width; xCoordinate++) 
      { 
       Color color = sepiaEffect.GetPixel(xCoordinate, yCoordinate); 
       double grayColor = ((double)(color.R + color.G + color.B))/3.0d; 
       Color sepia = Color.FromArgb((byte)grayColor, (byte)(grayColor * 0.95), (byte)(grayColor * 0.82)); 
       sepiaEffect.SetPixel(xCoordinate, yCoordinate, sepia); 
      } 
     } 
     pictureBox.Image = sepiaEffect; 
    } 

이, 그러나 아주 천천히 세트입니다 중첩 된 루프

private void button2_Click(object sender, EventArgs e) 
    { 
     float[][] sepiaValues = { 
      new float[]{.393f, .349f, .272f, 0, 0}, 
      new float[]{.769f, .686f, .534f, 0, 0}, 
      new float[]{.189f, .168f, .131f, 0, 0}, 
      new float[]{0, 0, 0, 1, 0}, 
      new float[]{0, 0, 0, 0, 1}}; 
     System.Drawing.Imaging.ColorMatrix sepiaMatrix = new System.Drawing.Imaging.ColorMatrix(sepiaValues); 
     System.Drawing.Imaging.ImageAttributes IA = new System.Drawing.Imaging.ImageAttributes(); 
     IA.SetColorMatrix(sepiaMatrix); 
     Bitmap sepiaEffect = (Bitmap)pictureBox.Image.Clone(); 
     using (Graphics G = Graphics.FromImage(sepiaEffect)) 
     { 
      G.DrawImage(pictureBox.Image, new Rectangle(0, 0, sepiaEffect.Width, sepiaEffect.Height), 0, 0, sepiaEffect.Width, sepiaEffect.Height, GraphicsUnit.Pixel, IA); 
     } 
     pictureBox.Image = sepiaEffect; 
    } 

내가 this에서 세피아 톤 값을 가지고 : 더 빠른 방법은 ColorMatrix을 색상을 변환 한 후 사용하여 ImageAttributes를 통해 그것을 통과하는 새로운 비트 맵으로 이미지를 다시 그리는 방법을 나타내는 ColorMatrix를 만드는 것입니다 조.

관련 문제