首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libtiff.net writeScanLine返回false

libtiff.net writeScanLine返回false
EN

Stack Overflow用户
提问于 2014-11-26 07:08:11
回答 1查看 775关注 0票数 0

我正在使用libtiff.net从jpeg中获取数据。当我尝试编写时,问题会出现,因为tiff.writeScanLine返回false,这意味着图像不是写在tiff中。

为什么会发生这种情况?我怎么知道是怎么回事?

下面是代码:

代码语言:javascript
复制
 private bool creatingTiff()
        {
            using (Bitmap bmp = new Bitmap(targetFile))
            {
                using (Tiff tif = Tiff.Open("BitmapTo24BitColorTiff.tif", "w"))
                {
                    byte[] raster = getImageRasterBytes(bmp, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    tif.SetField(TiffTag.IMAGEWIDTH, bmp.Width);
                    tif.SetField(TiffTag.IMAGELENGTH, bmp.Height);
                    tif.SetField(TiffTag.COMPRESSION, Compression.OJPEG);
                    tif.SetField(TiffTag.PHOTOMETRIC, Photometric.YCBCR);
                    tif.SetField(TiffTag.SUBFILETYPE, 0);
                    tif.SetField(TiffTag.ROWSPERSTRIP, bmp.Height);
                    tif.SetField(TiffTag.ORIENTATION, BitMiracle.LibTiff.Classic.Orientation.TOPLEFT);
                    tif.SetField(TiffTag.XRESOLUTION, bmp.HorizontalResolution);
                    tif.SetField(TiffTag.YRESOLUTION, bmp.VerticalResolution);
                    tif.SetField(TiffTag.RESOLUTIONUNIT, ResUnit.INCH);
                    tif.SetField(TiffTag.BITSPERSAMPLE, 8);
                    tif.SetField(TiffTag.SAMPLESPERPIXEL, 3);
                    tif.SetField(TiffTag.JPEGIFOFFSET, 768);
                    tif.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);

                    for (int i = 0, offset = 0; i < bmp.Height; i++)
                    {
                        bool b = tif.WriteScanline(raster, offset, i, 0);
                        Console.WriteLine("write succes: " + b);
                        offset += stride;
                    }
                }
                System.Diagnostics.Process.Start("BitmapTo24BitColorTiff.tif");
                return true;
            }
        }
            

        private static byte[] getImageRasterBytes(Bitmap bmp, System.Drawing.Imaging.PixelFormat format)
        {
            System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height);
            byte[] bits = null;

            try
            {
                // Lock the managed memory
                BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);

                // Declare an array to hold the bytes of the bitmap.
                bits = new byte[bmpdata.Stride * bmpdata.Height];

                // Copy the values into the array.
                System.Runtime.InteropServices.Marshal.Copy(bmpdata.Scan0, bits, 0, bits.Length);

                // Release managed memory
                bmp.UnlockBits(bmpdata);
            }
            catch
            {
                return null;
            }

            return bits;
        }
                                                               
        private static void convertSamples(byte[] data, int width, int height)
        {
            int stride = data.Length / height;
            const int samplesPerPixel = 3;

            for (int y = 0; y < height; y++)
            {
                int offset = stride * y;
                int strideEnd = offset + width * samplesPerPixel;

                for (int i = offset; i < strideEnd; i += samplesPerPixel)
                {
                    byte temp = data[i + 2];
                    data[i + 2] = data[i];
                    data[i] = temp;
                }
            }
        }

tif-标记是写的,但是图像本身却不是,也许如果有人能把我指向库开发人员博客(BitMiracle)的方向,我可以直接把我的问题告诉他们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-27 16:43:47

我认为您的代码有以下错误:

  • 不能对新图像使用Compression.OJPEG。旧的JPEG只能被解压缩。
  • 您可能不应该手动指定TiffTag.JPEGIFOFFSET值。库本身将指定适当的值。
  • 您正在尝试使用WriteScanline方法编写整个条形图。您应该使用WriteEncodedStrip代替。

它还有助于检查库发出的警告(将它们发送到控制台)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27143188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档