保存的BitmapSource为TIFF JPEG编码使用Libtiff.net(Saving Bi

2019-09-22 20:42发布

我试图写一个程序,将一个WPF的BitmapSource保存为使用LibTiff.net一个JPEG编码TIFF。 使用配备的libtiff的例子,我想出了以下内容:

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或什么标签或两个是错误的,如光度解释,但我不上什么是需要完全清楚。

干杯,

Answer 1:

目前还不清楚是什么,你说“颜色是搞砸了”,但可能是你应该的BGR采样转换的意思BitmapSource为RGB那些由LibTiff.Net预期。

我的意思是,要确保颜色通道的顺序是喂养像素RGB之前(最有可能,这不是) WriteScanline方法。



文章来源: Saving BitmapSource as Tiff encoded JPEG using Libtiff.net