Lossy 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");
}
}