2013-03-05 3 views
1

그레이 스케일 이미지로 JPEG를 저장하려고합니다.JPEG를 그레이 스케일 컬러 모드로 저장

아래 코드는 입니다. 채널을 혼합하여 그레이 스케일을 만들지 만 여전히 3 개의 RGB 채널을 모두 가지고 있습니다. 난 단지 하나의 8 비트 채널이 필요합니다.

public static 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}, 
      new float[] {.59f, .59f, .59f, 0, 0}, 
      new float[] {.11f, .11f, .11f, 0, 0}, 
      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; 
    } 

실제로 C#에서 JPEG의 색상 모드를 설정하는 방법이 있습니까?

다음을 시도했지만 여전히 24 비트 RGB 이미지를 출력합니다.

  ImageCodecInfo codec = GetEncoderInfo("image/jpeg"); 
      System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.ColorDepth; 
      EncoderParameters encParams = new EncoderParameters(1); 
      encParams.Param[0] = new EncoderParameter(enc, 8L); 

      source_bitmap.Save(outputFile, codec, encParams); 
+0

코드와 직접 관련이 없지만 도움이 될 수 있습니다 http://www.codeproject.com/Articles/70442/C-RGB-to-Palette-Based-8-bit-Greyscale-Bitmap -Clas – keyboardP

답변

1

이미지에는 세 가지 채널의 선형 조합으로 컴파일 할 수있는 다른 그레이 스케일이 있습니다.

가장 일반적으로 사용되는 '광도'가 있지만 이미지에 따라 다릅니다. See this

는 광도로 변환하는 걸릴 그레이 스케일

R, G 및 B가 적색, 녹색 및 청색 채널을 각각 그들이에있는 경우가 1로 10-0의 규모에 있는지 주어진
greyscale = 0.21 * R + 0.71 * G + 0.07 * B 

255 눈금, 255로 나누기

관련 문제