如何在Magick.net中设置位深度

时间:2018-07-18 23:58:16

标签: c# imagemagick magick.net bit-depth

读取二进制文件时如何指定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:意外   文件末尾'':无此类文件或目录@   错误/gray.c/ReadGRAYImage/241

表示程序已读取文件末尾。我已经确认Magick.NET将恢复到16位深度,而不是我想要的8位深度。我可以使用settings.Height = 512而不是1024读取文件,这为我的灰度图像提供了压缩版本。

我从Memory consumption in Magick.NET了解到,Magick.NET Q16将像素以16位精度存储在内存中。我对此表示满意,但似乎并不能排除8位读取功能。

如何强制Magick.NET Q16读取8位深度的像素?

2 个答案:

答案 0 :(得分:1)

我刚刚发布了Magick.NET 7.6.0.0,它现在具有更好的API来读取原始像素。您应该将代码更改为此:

    include './entities/Answer.php';
    include './entities/Question.php';
    include './Database.php';

    session_start();

答案 1 :(得分:0)

一种解决方法是使用$ psql --host=localhost --dbname=login --username=f login=> select * from "user"; ERROR: permission denied for relation user 版本而不是Magick.NET Q8。我使用程序Magick.NET Q16成功读取了文件。

我仍然希望有一种解决方案可以让我仍然使用Magick.NET Q8-AnyCPU 7.5.0.1,但这目前仍然有效。