2

TIFF ファイル (8 ビット パレット) のセットがあります。ビット深度を 32 ビットに変更する必要があります。以下のコードを試してみましたが、パラメーターが正しくないというエラーが発生しました...修正するのを手伝ってもらえますか? または、some1 が私の問題に対して別の解決策を提案できるかもしれません。

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.

4

1 に答える 1

2

発生しているエラーが次の行にある場合:

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

問題は、コンパイラが参照しているかどうかを認識できないこと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);
于 2012-09-20T10:40:20.760 に答える