1

我使用Magick.NET来处理文件。现在我需要将原始图像格式(如 .dng、.3fr、.cr2、.raw、.ptx 等)转换为简单的 jpg 以在网站上生成预览。我在这里的文档中找到了示例, 但它不起作用。我将 dcraw.exe 放到 Magick.NET dll 中,但此时总是出错:

//code
using (var originalImg = new MagickImage(abspath))...
//text of error
InnerException = {"iisexpress.exe: FailedToExecuteCommand `dcraw.exe -6 -w -O \"C:/Users/A8F50~1.CHE/AppData/Local/Temp/magick-29445L9OLy_DVIQq.ppm\" \"C:/Users/A8F50~1.CHE/AppData/Local/Temp/magick-294458yvxz2HRaYX\"' (-1) @ error/delegate.c/ExternalDelegateCommand/484"}
Message = "iisexpress.exe: UnableToOpenBlob 'C:/Users/A8F50~1.CHE/AppData/Local/Temp/magick-29445L9OLy_DVIQq.ppm': No such file or directory @ error/blob.c/OpenBlob/2684"

有人面临这样的问题吗?我不知道为什么会发生这种事情。我为此浪费了很多时间,如果你能帮我解决这个问题,我会很高兴

4

2 回答 2

3

你必须使用 FileStream 对象而不是文件路径......这对我有用。

尝试这个:

FileStream fileStream = new FileStream(@"C:\QRcodes\IMG_9540.CR2", FileMode.Open);

        using (MagickImage magickImage = new MagickImage(fileStream))
        {
            byte[] imageBytes = magickImage.ToByteArray();

            Console.WriteLine("bytes in image: " + imageBytes.Length);
            Console.ReadKey();
        }

问候马库斯

于 2015-12-17T10:10:51.393 回答
0

这与文件流或实际物理路径无关。您可以使用物理路径调用 MagickImage 构造函数。您收到的问题和错误消息是您的代码找不到该文件。这可能是因为权限或您传递文件地址的方式或任何阻止您的代码访问文件的事情。另一件事:将 MagickImage 转换为 ByteArray 非常耗时,并且是系统中的繁重过程。如果您尝试使用 20000 像素的图像,您将看到结果。

于 2016-07-18T07:47:32.640 回答