2011-09-06 6 views
2

나는 텍스트가 들어있는 그림을 가지고있다. 이미 ColorMatrix를 사용하여 그 그림을 회색조로 변환했습니다.C#에서 그림의 색조를 증가시키는 방법은 무엇입니까?

public Bitmap MakeGrayscale(Bitmap original) 
{ 
    //create a blank bitmap the same size as original 
    Bitmap newBitmap = new Bitmap(original.Width, original.Height); 

    //get a graphics object from the new image 
    Graphics g = Graphics.FromImage(newBitmap); 

    //create the grayscale ColorMatrix 
    ColorMatrix colorMatrix = new ColorMatrix(
     new float[][] 
     { 
    new float[] {.3f, .3f, .3f, 0, 0}, // 30% red. 
    new float[] {.59f, .59f, .59f, 0, 0}, // 59% green. 
    new float[] {.11f, .11f, .11f, 0, 0}, // 11% blue. 
    new float[] {0, 0, 0, 1, 0}, 
    new float[] {0, 0, 0, 0, 1} 
      }); 

    //create some image attributes 
    ImageAttributes attributes = new ImageAttributes(); 


    //set the color matrix attribute 
    attributes.SetColorMatrix(colorMatrix); 

    //draw the original image on the new image 
    //using the grayscale color matrix 
    g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height), 
     0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes); 

    //dispose the Graphics object 
    g.Dispose(); 
    return newBitmap; 
} 

자, 이것은 상당히 회색 음영입니다 (흑백 톤). 나는 검은 색 톤을 증가시키고 Photoshop으로 할 수있는 더 어둡게 만들고 싶습니다. 제게 C#에서 이것을 어떻게 얻을 수 있는지 알려주십시오.

알려 주시기 바랍니다.

건배! :)

답변

1

한 가지 방법은 일반적으로 어두운로 픽셀을 적용하고, 비트 맵의 ​​모든 픽셀 (컬러 개체) 이상 반복 시도하고,이 조각은

도움이 될 비율 에 의해 어둡게 새로운 색상으로 대체
/// <summary> 
    /// Darkens the immage, giving a number greater then one will not brighten the image correctly 
    /// </summary> 
    /// <param name="bmp">The bitmap to darken</param> 
    /// <param name="multiplier">The multiplier, should be less then oen to darker the picture</param> 
    static void DarkenImage(Bitmap bmp, double multiplier) 
    { 
     for (int i = 0; i < bmp.Width; i++) 
     { 
      // Iterates over all the pixels 
      for (int j = 0; j < bmp.Height; j++) 
      { 
       // Gets the current pixel 
       var currentPixel = bmp.GetPixel(i, j); 

       // Assigns each value the multiply, or the max value 255 
       var newPixel = Color.FromArgb(
        Math.Min((byte)255, (byte)(currentPixel.R * multiplier)), 
        Math.Min((byte)255, (byte)(currentPixel.G * multiplier)), 
        Math.Min((byte)255, (byte)(currentPixel.B * multiplier)) 
        ); 

       // Sets the pixel 
       bmp.SetPixel(i, j, newPixel); 
      } 
     } 
    } 
관련 문제