2

バイナリ ファイルを読み取るときに 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 ビット深度でピクセルを読み込ませるにはどうすればよいですか?

4

2 に答える 2