首页 > 解决方案 > 通过 Libtiff .NET 编写线性 DNG 时出错

问题描述

我正在尝试使用有损 JPEG (34892)压缩(在 DNG 1.4.0.0 中引入)创建基于 JPG 的线性 DNG 文件。运行下面的方法后,我从 dng_validate.exe收到错误“错误:文件格式无效(JPEG 尺寸与图块不匹配)” 。

如果有人可以通过调整我的代码来解决它,那就太好了。另外,我很乐意提供教程链接。使用图像工具(magick、dcraw、exiftool)也可能是一种解决方案。

public static void LinearRawDng()
        {
            string file = "eva.jpg";
            using (Tiff tif = Tiff.Open("eva-linear.dng", "w"))
            {
                Image img = Image.FromFile(file);
                byte[] raster;
                using (MemoryStream ms = new MemoryStream())
                {
                    img.Save(ms, ImageFormat.Jpeg);
                    raster = ms.ToArray();
                }

                tif.SetField(TiffTag.MAKE, "Fitler");
                tif.SetField(TiffTag.UNIQUECAMERAMODEL, "Fitler");
                tif.SetField(TiffTag.DNGVERSION, "\x1\x4\x0\x0");
                tif.SetField(TiffTag.DNGBACKWARDVERSION, "\x1\x4\x0\x0");

                tif.SetField(TiffTag.SUBFILETYPE, 0);
                tif.SetField(TiffTag.PHOTOMETRIC, 34892);
                tif.SetField(TiffTag.COMPRESSION, 34892);
                tif.SetField(TiffTag.SAMPLESPERPIXEL, 1);
                tif.SetField(TiffTag.BITSPERSAMPLE, 8);
                tif.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT);
                tif.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
                tif.SetField(TiffTag.IMAGEWIDTH, img.Width);
                tif.SetField(TiffTag.IMAGELENGTH, img.Height);


                var result = tif.WriteRawStrip(0, raster, raster.Length);               
                tif.Close();
                Console.WriteLine("Finished");
            }
        }

标签: c#.netlibtifflibtiff.netdng

解决方案


推荐阅读