none
是什么原因呢 RRS feed

  • 问题

  •   编的程序在visual studio里全部运行通过,调试也没有问题。可做成安装程序安装后,一调试就出错误!生成安装程序都是按网上教程做的,也是生成成功的啊
    2009年12月27日 6:54

答案

  • 你好!
         我最近也遇到了类似的问题,你看看是否是类似的原因!
         “GDI+发生一般性错误”,这样的错误一般可以这样重现:

    Image image = new Bitmap(openFileDialog1 .FileName );
    image.Save(openFileDialog1 .FileName ,System .Drawing .Imaging .ImageFormat .Jpeg );

    发生这个错误的原因是:
    从一个文件构造的Bitmap 对象或一个 Image 对象, 在该对象的生存期内该文件处于锁定状态。 因此, 在没有释放这个Image或Bitmap对象前,无法更改图像并将其保存回原文件。

    解决方法是:
    构造一个新的Image对象,然后把原来的Image对象中的图象通过Graphics的DrawImage()方法,拷贝到新Image对象中,最后通过Dispose()方法释放员来的Image对象:

    Image image = new Bitmap ( openFileDialog1 . FileName );

    //新建第二个Image类型的变量newImage,这里是根据程序需要设置自己设置。
    Image newImage = new Bitmap ( 800 , 600 );

    //将第一个bmp拷贝到bmp2中
    Graphics draw = Graphics . FromImage ( newImage);
    draw . DrawImage ( image , 0 , 0 );

    //释放第一个Image对象
    image.Dispose();

    //保存图象
    newImage.Save(openFileDialog1.FileName);
    周雪峰
    • 已标记为答案 pesistence 2009年12月27日 14:41
    2009年12月27日 11:24
    版主

全部回复

  • 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾。
    ************** 异常文本 ************** System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误。
     在 System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) 在 System.Drawing.Image.Save(String filename, ImageFormat format)
    在 System.Drawing.Image.Save(String filename)
     在 WindowsFormsApplication3.Form1.updatephtoto_Click(Object sender, EventArgs e) 位置 C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\学生系统\WindowsFormsApplication3\Form1.cs:行号 235 在 System.Windows.Forms.Control.OnClick(EventArgs e)
    在 System.Windows.Forms.Button.OnClick(EventArgs e)
    在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
     在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    在 System.Windows.Forms.Control.WndProc(Message& m)
     在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** 已加载的程序集 **************
    mscorlib 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3603 (GDR.050727-3600) 基本代码: file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    WindowsFormsApplication3 程序集版本: 1.0.0.0 Win32 版本: 1.0.0.0 基本代码: file:///E:/学生系统啊/学生系统/WindowsFormsApplication3/bin/Debug/WindowsFormsApplication3.exe
     ----------------------------------------
    System.Windows.Forms 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
     ----------------------------------------
     System.Drawing 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
     ----------------------------------------
    System.Configuration 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ----------------------------------------
    System.Xml 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3082 (QFE.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
     ----------------------------------------
    System.Data 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dl
    l ----------------------------------------
    System.Transactions 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll ----------------------------------------
    System.EnterpriseServices 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3053 (netfxsp.050727-3000) 基本代码: file:///C:/WINDOWS/assembly/GAC_32/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
     ---------------------------------------- System.Drawing.resources 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.1433 (REDBITS.050727-1400) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing.resources/2.0.0.0_zh-CHS_b03f5f7f11d50a3a/System.Drawing.resources.dll
    ---------------------------------------- System.Windows.Forms.resources 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.1433 (REDBITS.050727-1400) 基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
     ---------------------------------------- mscorlib.resources 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.3603 (GDR.050727-3600) 基本代码: file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    ************** JIT 调试 ************** 要启用实时(JIT)调试, 该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置 jitDebugging 值。 编译应用程序时还必须启用 调试。
    例如: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> 启用 JIT 调试后,任何无法处理的异常 都将被发送到在此计算机上注册的 JIT 调试器, 而不是由此对话框处理。

    这是我安装后调试出现的错误,可是我在visual studio调试源程序时更本就没有错误啊
    2009年12月27日 8:03
  • 你好!
         我最近也遇到了类似的问题,你看看是否是类似的原因!
         “GDI+发生一般性错误”,这样的错误一般可以这样重现:

    Image image = new Bitmap(openFileDialog1 .FileName );
    image.Save(openFileDialog1 .FileName ,System .Drawing .Imaging .ImageFormat .Jpeg );

    发生这个错误的原因是:
    从一个文件构造的Bitmap 对象或一个 Image 对象, 在该对象的生存期内该文件处于锁定状态。 因此, 在没有释放这个Image或Bitmap对象前,无法更改图像并将其保存回原文件。

    解决方法是:
    构造一个新的Image对象,然后把原来的Image对象中的图象通过Graphics的DrawImage()方法,拷贝到新Image对象中,最后通过Dispose()方法释放员来的Image对象:

    Image image = new Bitmap ( openFileDialog1 . FileName );

    //新建第二个Image类型的变量newImage,这里是根据程序需要设置自己设置。
    Image newImage = new Bitmap ( 800 , 600 );

    //将第一个bmp拷贝到bmp2中
    Graphics draw = Graphics . FromImage ( newImage);
    draw . DrawImage ( image , 0 , 0 );

    //释放第一个Image对象
    image.Dispose();

    //保存图象
    newImage.Save(openFileDialog1.FileName);
    周雪峰
    • 已标记为答案 pesistence 2009年12月27日 14:41
    2009年12月27日 11:24
    版主
  • 学习了...

    2009年12月29日 2:19