2012-09-23 2 views
2

LibTiff.net을 사용하여 WPF BitmapSource를 JPEG로 인코딩 된 TIFF로 저장하는 루틴을 작성하려고합니다. LibTiff와 함께 제공되는 예제를 사용하여 나는 다음과 같은 내놓았다 :BitmapSource를 Tiff로 인코딩 된 JPEG로 저장 Libtiff.net을 사용하여

private void SaveJpegTiff(BitmapSource source, string filename) 
    { 

     if (source.Format != PixelFormats.Rgb24) source = new FormatConvertedBitmap(source, PixelFormats.Rgb24, null, 0); 


     using (Tiff tiff = Tiff.Open(filename, "w")) 
     { 
      tiff.SetField(TiffTag.IMAGEWIDTH, source.PixelWidth); 
      tiff.SetField(TiffTag.IMAGELENGTH, source.PixelHeight); 
      tiff.SetField(TiffTag.COMPRESSION, Compression.JPEG); 
      tiff.SetField(TiffTag.PHOTOMETRIC, Photometric.RGB); 

      tiff.SetField(TiffTag.ROWSPERSTRIP, source.PixelHeight); 

      tiff.SetField(TiffTag.XRESOLUTION, source.DpiX); 
      tiff.SetField(TiffTag.YRESOLUTION, source.DpiY); 

      tiff.SetField(TiffTag.BITSPERSAMPLE, 8); 
      tiff.SetField(TiffTag.SAMPLESPERPIXEL, 3); 

      tiff.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG); 

      int stride = source.PixelWidth * ((source.Format.BitsPerPixel + 7)/8); 

      byte[] pixels = new byte[source.PixelHeight * stride]; 
      source.CopyPixels(pixels, stride, 0); 

      for (int i = 0, offset = 0; i < source.PixelHeight; i++) 
      { 
       tiff.WriteScanline(pixels, offset, i, 0); 
       offset += stride; 
      } 
     } 

     MessageBox.Show("Finished"); 
    } 

이 이미지를 변환하고 내가 JPEG 이미지를 볼 수 있지만 색상이 엉망이된다. 나는 TIFF를위한 태그 하나 또는 두 개를 놓치고 있거나 Photometric 해석과 같은 것이 잘못되었지만 필요한 것에 대해 완전히 명확하지는 않다고 생각합니다.

건배,

답변

0

당신이 "색상이 엉망"하지만 아마 당신이 LibTiff.Net 예상 RGB 것들에 BitmapSource의 BGR 샘플을 변환해야 말을 뜻합니까 무엇 분명하지 않다.

즉, 픽셀을 WriteScanline 방법으로 넘기기 전에 색상 채널의 순서가 RGB인지 확인하십시오 (대부분 그렇지 않을 수도 있음).

+2

엉망이 된 색상은 주로 흰색, 회색 및 빨간색 인 테스트 이미지 중 하나를 사용하여 설명하기가 다소 어려웠습니다. 흰색은 마젠타, 회색 녹색 및 빨간색 밝은 녹색이됩니다. RGB에서 BGR로 변경해도 아무런 차이가 없었습니다. 이상하게도 LZW로 저장하면 tiff와 ​​색상이 괜찮습니다. JPEG로 압축을 변경하면이 문제가 발생합니다. 편집 : JPEG TIFF 응용 프로그램 노트에서 읽은 내용을 생각해 봅니다. 측광 해석이 잘못되었습니다. JPEG의 경우 YCBCR이어야합니다. 나는 이것을 바꿨고 지금은 모두 작동하고있다. 감사합니다. – making