1

我想使用 LibTiff.Net 从流中读取 TIFF 图像。当我使用 under 模式打开图像时,该库可以工作"r",但是当我使用"w"mode 时,它​​会返回null.

这是我使用的方法。

Tiff image = Tiff.ClientOpen("in-memory", "w", memStream, new TiffStream());

我使用GhostScript.Net将 PDF 转换为 TIFF 图像,然后使用LibTiff.Net编写 Tiff 标签。这里有更多代码:

MemoryStream memStream = new MemoryStream();

using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
            {
                rasterizer.Open(datastream, _lastInstalledVersion, false);

                System.Drawing.Image images = rasterizer.GetPage(desired_x_dpi, desired_y_dpi, 1);
                Bitmap bmp = new Bitmap(images);
                bmp.SetResolution(200,200);
                images = (System.Drawing.Image)bmp;
                ImageCodecInfo tiffEncoder = ImageCodecInfo.GetImageEncoders().SingleOrDefault(s => s.MimeType == "image/tiff");



                EncoderParameters myEncoderParameters = new EncoderParameters(3);
                EncoderParameter myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
                myEncoderParameters.Param[0] = myEncoderParameter;
                myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
                myEncoderParameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 200L);


                images.Save(memStream, tiffEncoder, myEncoderParameters);

                memStream.Position = 0;
                TiffStream tifstr = new TiffStream();

                Tiff image = Tiff.ClientOpen("in-memory", "w", memStream, tifstr);

                image.SetField(TiffTag.SUBFILETYPE, FileType.PAGE);
                image.SetField(TiffTag.IMAGEWIDTH, 1704);
                image.SetField(TiffTag.IMAGELENGTH, 2200);
                image.SetField(TiffTag.BITSPERSAMPLE, 1);
                image.SetField(TiffTag.COMPRESSION, Compression.CCITT_T4);
                image.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISWHITE);
                image.SetField(TiffTag.FILLORDER, FillOrder.LSB2MSB);
                image.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT);
                image.SetField(TiffTag.SAMPLESPERPIXEL, 1);
                image.SetField(TiffTag.ROWSPERSTRIP, 2200);
                image.SetField(TiffTag.MINSAMPLEVALUE, 0);
                image.SetField(TiffTag.MAXSAMPLEVALUE, 1);
                image.SetField(TiffTag.XRESOLUTION, 200);
                image.SetField(TiffTag.YRESOLUTION, 200);
                image.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
                image.SetField(TiffTag.RESOLUTIONUNIT, ResUnit.INCH);
                image.WriteDirectory();
                memStream = (MemoryStream)image.Clientdata();

            }

"w"如果我使用模式,看起来流位置不能设置为 0 。它现在工作正常。

但是写完标签后,TIFF Image 无法打开,在 Windows Photo Viewer 中,它说

file 
appeared to damaged , corrupted or it's too large

.

我使用时有什么遗漏LibTiff.NET吗?

当我使用"r"模式时,它很好。但是"w"模式会破坏图像文件。

4

0 回答 0