2012-09-20 5 views
1

일부 TIFF 파일 세트 (8 비트 팔레트)가 있습니다. 비트 깊이를 32 비트로 변경해야합니다. 아래 코드를 시도했지만 오류가 발생하여 매개 변수가 올바르지 않습니다 ... 해결하도록 도와 주시겠습니까? 아니면 some1 내 문제에 대한 다른 해결책을 제안 할 수 있습니다.8 비트에서 32 비트로 TIFF 팔레트 변경

public static class TiffConverter 
{ 
    public static void Convert8To32Bit(string fileName) 
    { 
     BitmapSource bitmapSource; 
     using (Stream imageStreamSource = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); 
      bitmapSource = decoder.Frames[0]; 
     } 

     using (FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate)) 
     { 
      ImageCodecInfo tiffCodec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(codec => codec.FormatID.Equals(ImageFormat.Tiff.Guid)); 
      if (tiffCodec != null) 
      { 
       Image image = BitmapFromSource(bitmapSource); 
       EncoderParameters parameters = new EncoderParameters(); 
       parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 32); 
       image.Save(stream, tiffCodec, parameters); 
      } 
     } 
    } 

    private static Bitmap BitmapFromSource(BitmapSource bitmapSource) 
    { 
     Bitmap bitmap; 
     using (MemoryStream outStream = new MemoryStream()) 
     { 
      BitmapEncoder enc = new BmpBitmapEncoder(); 
      enc.Frames.Add(BitmapFrame.Create(bitmapSource)); 
      enc.Save(outStream); 
      bitmap = new Bitmap(outStream); 
     } 
     return bitmap; 
    } 
} 

미리 감사드립니다.

image.Save(stream, tiffCodec, parameters); 

ArgumentException occured: Parameter is not valid.

답변

2

당신이지고있어 오류가 라인에있는 경우 :

[편집]

나는 오류가이 줄에 나타납니다 것으로 나타났습니다

parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 32); 

다음 문제는 th 당신이 System.Text.Encoder 또는 System.Drawing.Imaging.Encoder을 참조하는 경우 컴파일러는 알 수 없다 전자 ...

코드는 모호한 방지하기 위해 다음과 같아야합니다

parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 32); 

편집 :

이를 같은 일을하는 대체 (및 테스트 :) :) 방법입니다 :

Image inputImg = Image.FromFile("input.tif"); 

var outputImg = new Bitmap(inputImg.Width, inputImg.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
using (var gr = Graphics.FromImage(outputImg)) 
    gr.DrawImage(inputImg, new Rectangle(0, 0, inputImg.Width, inputImg.Height)); 

outputImg.Save("output.tif", ImageFormat.Tiff); 
+0

Nope, cuz 다음과 같이 사용하여 만들었습니다. 'Using Encoder = System.Drawing.Imaging.Encoder; ' – Nickon

+0

그러면 오류는 어디에 있습니까? –

+0

젠장, 내 잘못이야. 'image.Save (stream, tiffCodec, parameters);'와 같은 매개 변수에 문제가 있습니다. 그러나 여전히 이유를 모르겠습니다 ... – Nickon

관련 문제