バイナリ ファイルを読み取るときに MagickImage.Read() 関数のビット深度を指定するにはどうすればよいですか?
8 ビットのグレースケール値で表される 1024x1024 の画像があります (ファイルの合計長 = 1024x1024 = 1048576 バイト)。ImageMagick v.7.0.8-7 Q16 x64 を使用して、次を使用してファイルを変換できます
magick.exe -depth 8 -size 1024x1024 -format Gray Gray:filepath.bin convertedfile.png
Magick.NET Q16-AnyCPU v7.5.0.1 を使用してファイルを変換しようとすると、
public MagickImage ReadNewMagickImageFromBinary(string fileName){
MagickReadSettings settings = new MagickReadSettings();
settings.Width = 1024;
settings.Height = 1024; //if I use settings.Height = 512; , I'm OK.
settings.Format = MagickFormat.Gray;
//settings.Depth = 8; //didn't work
//settings.SetDefine(MagickFormat.Gray, "depth", "8"); //also didn't work
MagickImage newImage = new MagickImage();
newImage.Depth = 8; //this appears to be ignored once the Read function is called
newImage.Read(fileName, settings);
return newImage;
}
エラーが発生します
メッセージ: ImageMagick.MagickCorruptImageErrorException : 予期しないファイルの終わり '': そのようなファイルまたはディレクトリはありません @ error/gray.c/ReadGRAYImage/241
プログラムがファイルの末尾を超えて読み取ったことを示します。Magick.NET が、必要な 8 ビット深度ではなく 16 ビット深度に戻っていることを確認しました。1024 の代わりに使用してファイルを読み取ることができますsettings.Height = 512
。これにより、グレースケール イメージの圧縮されたバージョンが得られます。
Magick.NET のメモリ消費量から、Magick.NET Q16 がピクセルを 16 ビット精度でメモリに保存することを知りました。私はそれで問題ありませんが、8 ビットの読み取り機能を排除する必要はないようです。
Magick.NET Q16 に 8 ビット深度でピクセルを読み込ませるにはどうすればよいですか?