异常使用ImageMagick.net多次创建和保存图像



也许我对这个问题的措辞很差,但是我试图遵循ImageMagick.net库文档,并且我有一个程序,该程序根据用户输入生成文本。

第一次运行良好,但是程序随后崩溃,但仍在运行时。

如果我退出并重新启动它会覆盖没有挂钩的先前文件。

using (MagickImageCollection images = new MagickImageCollection())
{
    MagickReadSettings readSettings = new MagickReadSettings()
    {
        BackgroundColor = MagickColors.None, // -background none
        FillColor = MagickColors.Black, // -fill black
        Font = "Helvetica-Condensed-Light", // -font Helvetica-Condensed-Light
        FontPointsize = 26 // -pointsize 26
    };
    // this being declared a second time is probably why it crashes.
    MagickImage image = new MagickImage("label:" + output, readSettings);
    image.RemoveAttribute("label"); // +set label
    images.Add(image);
    MontageSettings montageSettings = new MontageSettings()
    {
        BackgroundColor = MagickColors.None, // -background none
        Shadow = true, // -shadow
        Geometry = new MagickGeometry(5, 5, 0, 0) // -geometry +5+5
    };
    using (MagickImage result = images.Montage(montageSettings))
    {
        result.Write("blarg.png");
    }
}

由于上述函数的动作位于按钮事件处理程序中,因此,如果第二次按下,它将被第二次声明,但是我仍然对C#相对较新,并且不确定将其重写的方法正确,因为我正在从他们的文档中调整它。

错误:

Exception thrown: 'ImageMagick.MagickCoderErrorException' in Magick.NET-Q8-x64.dll
Exception type ImageMagick.MagickCoderErrorException
Exception message: WriteBlob Failed `blarg.png' @ error/png.c/MagickPNGErrorHandler/1650
Stack trace:    at ImageMagick.MagickExceptionHelper.Check(IntPtr exception)
  at ImageMagick.MagickImage.NativeMagickImage.WriteFile(MagickSettings settings)
  at phVer.frmMain.btnGenerate_Click(Object sender, EventArgs e) in C:Usersjweinraubdocumentsvisual studio 2015ProjectsphVerphVerForm1.cs:line 83
---BEGIN InnerException--- 
Exception type ImageMagick.MagickBlobErrorException
Exception message: unable to open image 'blarg.png': Permission denied @   error/blob.c/OpenBlob/2695
Stack trace: 
---END Inner Exception

update :似乎实际问题是我有一个预览窗格,其中包含保存的图像的背景图像。随后的运行崩溃。删除预览窗格可以多次编写文件,但不确定为什么预览窗格有问题(其背景图像控件具有面板控件)。我已经尝试设置为无效/disposing/c c; c noase。

/* Preview.BackgroundImage = Image.FromFile("blarg.png"); */
if ( Preview.BackgroundImage != null )
{
    Preview.BackgroundImage.Dispose();
    Preview.BackgroundImage = null;
    Preview.Dispose();
}
var image2 = (Bitmap)Image.FromFile("blarg.png", true);
Preview.BackgroundImage = image2;

Image.FromFile将锁定文件。您应该做类似下面的示例以避免锁定的事情。

if (Preview.BackgroundImage != null)
  Preview.BackgroundImage.Dispose();
using (var bitmap = new Bitmap("blarg.png"))
{
  Preview.BackgroundImage = new Bitmap(bitmap);
}

相关内容

  • 没有找到相关文章

最新更新