读取二进制文件时如何指定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位深度的像素?
答案 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
,但这目前仍然有效。