首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我调用Bitmap.Save函数时出现错误"GDI +中发生了一般错误"

这个错误通常是因为GDI+无法在目标设备上打开文件,或者无法分配足够的内存来处理图像。

解决这个问题的方法可能因情况而异,但以下是一些可能的解决方案:

  1. 检查目标文件路径是否正确。确保路径包含文件名和扩展名,并且目标设备上已启用对该路径的访问权限。
  2. 确保要保存的图像是32位BMP图像。如果图像不是32位BMP图像,请将其转换为32位BMP图像,然后再尝试保存。
  3. 如果目标设备上可用内存不足,请尝试减小图像的大小或质量。例如,您可以减小图像的宽度和高度,或者降低图像的DPI(每英寸点数)。
  4. 如果以上方法都无法解决问题,请尝试使用其他图像处理库或工具来保存图像。例如,您可以使用System.Drawing.Bitmap类或第三方库,如OpenCV。

如果问题仍然存在,建议查看错误日志以获取更详细的错误信息,并根据错误信息进行调试。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • .NET生成小程序码,并合自定义背景图生成推广小程序二维码

    对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了。今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种二维码就可以进入小程序。为了节省服务器内存资源,我想的就是成功调用通微信生成小程序码的接口后直接把微信返回过来的图片二进制内容(返回的图片 Buffer)转化为二进制byte[]文件流,然后再转成Image这样就不需要在保存到本地直接读取本地的背景图片通过GDI+(Graphics)绘制图片。废话不多说直接上码,各位同学假如有什么小程序的开发问题都欢迎评论区,或者qq私聊我有时间都可以一起学习探索。

    05

    C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。

    在GDI+1.1的版本中,MS加入不少新的特性,其中的特效类Effect就是一个很有吸引力的东西,可惜在VS2010的Image类中,却没有把这个类封装进来(不晓得是不是我没有发现),这个也许MS也有自己的考虑的,毕竟要使用这些函数,必须要求系统是Windows Vista及其以上,而XP的市场占有率在那个时候还比较高的。 不过,作为一种选择,我们有义务把这些函数给哪些已经按照了这些最新系统的客户使用。 其实,这些函数我在VB6下两年前就已经调用过,调用的方式也很简单明了,现在,在学习C#,就要考虑如何将他们封装入C#中。虽然哪些算法的更底层(像素级别的处理实现)实现在很早之前就已经实现,但是能够直接调用现有的函数对于不少朋友来说还是一件很幸福的事情的。 实现这个功能的第一步就是要找到这些函数的声明,这个在MSDN上有C风格的声明,改成C#语言的大部分都不成问题,参考 http://msdn.microsoft.com/en-us/library/ms533971(VS.85).aspx 例如,这个

    04

    在ASP.NET中随意创建图形信息

    如果没有一个外部组件的支持,在ASP中是不能动态创建图形的,不管它是一个图表,一个横幅或仅仅是一个图形计数器。可喜的是,这一点在ASP.NET中改变了。现在,我们只需要使用内置功能,就能够很容易动态创建图形,并向客户端发送具有最佳配置的图形。   用命令行程序创建图形   在讨论一大堆ASP.NET代码之前,我们先执行一个简单的命令行程序做一个测试,然后使用这些源代码作为 ASP.NET 脚本的基础。实际上,两者的区别在于:命令行程序将图形保存在一个文件中,而ASP.NET 脚本将图形直接发送到客户端。   举例的程序做什么呢?按照惯例,我们从众所周知的"Hello World" 程序开始,把这个文本信息输出到一个图形文件中,这个图形的大小要与当前选中的 "Hello World" 文本的字体和字号完全相同。   下面的脚本pagecounter.cs是一个典型的简单命令行程序:如果忽略包围在其周围的必须的类代码,就只剩下程序运行时要调用的主函数了,这也正是生成图形的代码所在处:   using System;   using System.IO;   using System.Drawing;   using System.Drawing.Imaging;   public class CTestBitmapFunctionality   {   public static void Main()   {   Bitmap newBitmap = null;   Graphics g = null ;   try   {   Font fontCounter = new Font("Lucida Sans Unicode", 12);   // calculate size of the string.   newBitmap = new Bitmap(1,1,PixelFormat.Format32bppARGB);   g = Graphics.FromImage(newBitmap);   SizeF stringSize = g.MeasureString("Hello World", fontCounter);   int nWidth = (int)stringSize.Width;   int nHeight = (int)stringSize.Height;   g.Dispose();   newBitmap.Dispose();   newBitmap = new Bitmap(nWidth,nHeight,PixelFormat.Format32bppARGB);   g = Graphics.FromImage(newBitmap);   g.FillRectangle(new SolidBrush(Color.White),   new Rectangle(0,0,nWidth,nHeight));   g.DrawString("Hello World", fontCounter,   new SolidBrush(Color.Black), 0, 0);   newBitmap.Save("c://test.png", ImageFormat.PNG);   }   catch (Exception e)   {   Console.WriteLine(e.ToString());   }   finally   {   if (null != g) g.Dispose();   if (null != newBitmap) newBitmap.Dispose();   }   }   }   在任何情况下,执行上面代码后,就会生成下面的图形test.png,它将存放在C驱动器上:   我们来仔细研究一下源代码,看看这个图形是如何创建的。关键一点是生成的图形必须与文本 "Hello World" 的字体和字号相同。因此,首先要计算文本的尺寸,为此我们使用了一个尺寸为1 x 1的虚拟图形。计算结束之后,再废弃这个虚拟图形并生成一个适当尺寸的图形。   源代码中有一点很有趣,这就是 Graphics 对象。要创建一个位图时,用这个对象做什么呢?奥妙在于:这是可以向其中绘图的上下文环境。我们可以在屏幕上、打印机上和内存中使用一个图形上下文环境,准确地说就是一个位图。图形的上下文环境使我们能够在任何设备上进行绘图操作,甚至是在虚拟设备上。   接着,用DrawString将文本 "Hello World"按照规格输出到一个白色背景的矩形(用 FillRectangle创建的)中。图形完成后,将其保存在磁盘上。凡是亲自研究过图形文件格式的人都知道这有多困难,但是使用 GDI+

    02
    领券