GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html
2013-01-06 10:13
746 查看
GDI+中发生一般性错误的解决办法
这个错误经常发生,代码如下:private static byte[] GetBytes (Image image)
{
try
{
if (image == null) return null;
using (MemoryStream stream = new MemoryStream())
{
image .Save(stream, ImageFormat.Jpeg);
return stream.GetBuffer();
}
}
finally
{
if(image != null)
{
image.Dispose();
image = null;
}
}
}
修改后的代码如下:
private static byte[] GetBytes (Image image)
{
try
{
if (image == null) return null;
using(Bitmap bitmap = new Bitmap(image))
{
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Jpeg);
return stream.GetBuffer();
}
}
}
finally
{
if(image != null)
{
image.Dispose();
image = null;
}
}
}
MSDN 解释如下:
Bitmap 对象或一个 图像 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件。
替代方法
• 创建非索引映像。
• 创建索引映像。
这两种情况下, 原始 位图 上调用 Bitmap.Dispose() 方法删除该文件上锁或删除要求, 流或内存保持活动。
创建非索引图像
即使原始映像被索引格式中该方法要求新图像位于每像素 (超过 8 位 -) -, 非索引像素格式。 此变通方法使用 Graphics.DrawImage() 方法来将映像复制到新 位图 对象:
1. 构造从流、 从内存, 或从文件原始 位图 。
2. 创建新 位图 的相同大小, 带有是超过 8 位 - - 像素 (BPP) 每像素格式。
3. 使用 Graphics.FromImage() 方法以获取有关二 位图 Graphics 对象。
4. 用于 Graphics.DrawImage() 绘制首 位图 到二 位图 。
5. 用于 Graphics.Dispose() 处置是 图形 。
6. 用于 Bitmap.Dispose() 是首 位图 处置。
创建索引映像
此解决办法在索引格式创建一个 Bitmap 对象:
1. 构造从流、 从内存, 或从文件原始 位图 。
2. 创建新 位图 具有相同的大小和像素格式作为首 位图 。
3. 使用 Bitmap.LockBits() 方法来锁定整个图像对于两 Bitmap 对象以其本机像素格式。
4. 使用 Marshal.Copy 函数或其他内存复制函数来从首 位图 复制到二 位图 图像位。
5. 使用 Bitmap.UnlockBits() 方法可以解锁两 Bitmap 对象。
6. 用于 Bitmap.Dispose() 是首 位图 处置。
创建非索引图像,例如:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//创建一个bitmap类型的bmp变量来读取文件。
Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
//新建第二个bitmap类型的bmp2变量,我这里是根据我的程序需要设置的。
Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
//将第一个bmp拷贝到bmp2中
Graphics draw = Graphics.FromImage(bmp2);
draw.DrawImage(bmp,0,0);
pictureBox1.Image = (Image)bmp2 ;//读取bmp2到picturebox
FILE = openFileDialog1.FileName;
openFileDialog1.Dispose();
draw.Dispose();
bmp.Dispose();//释放bmp文件资源
}
如果是在Web 程序中注意这些设置:
1. 相应的帐户没有写权限。
解决方法:赋予 NETWORK SERVICE 帐户以写权限。
2. 指定的物理路径不存在。
解决方法:
在调用 Save 方法之前,先判断目录是否存在,若不存在,则创建。
if (!Directory.Exists(dirpath))
Directory.CreateDirectory(dirpath);
转载请注明原创地址:/article/4922627.html
重新启动IIS.
相关文章推荐
- Windows Phone 7 MVVM模式数据绑定和传递参数 from:http://www.cnblogs.com/linzheng/archive/2011/03/27/1997086.html
- 服务器与wp7的socket通信【转】 http://www.cnblogs.com/linzheng/archive/2011/06/21/2086456.html
- 初学Windows Phone:MVVM Light Toolkit from:http://www.cnblogs.com/lrj525/archive/2012/04/05/2433226.html
- SQL Server 错误: 9003修复记 http://www.cnblogs.com/esshs/archive/2005/05/18/158360.html
- Jquery插件和注意点(提取自http://www.cnblogs.com/fromearth/archive/2009/07/08/1519054.html)
- Linux C语言错误处理(转载)http://www.cnblogs.com/nliao/archive/2010/09/09/1822647.html
- MySQL 插入数据时,中文乱码问题的解决http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html
- windows phone (20) Image元素 from http://www.cnblogs.com/shenzhoulong/archive/2012/04/25/2468951.html
- SharePoint 中 MasterPage 里面所有占位符列表(转载http://www.cnblogs.com/WinYoung/archive/2007/06/25/791766.html)
- CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
- WindowsPhone问题笔记-- 正确选择build action 解决媒体资源无法读取问题 转:http://www.cnblogs.com/qinxg/archive/2012/07/17/2594503.html
- 转载:.net 操作FTP from http://www.cnblogs.com/aierong/archive/2008/12/08/ftp.html
- 游览器高度和宽度 (转http://www.cnblogs.com/lizhengwei/archive/2009/11/18/1605459.html)
- Expression Blend制作画卷效果 from http://www.cnblogs.com/alexis/archive/2010/12/23/1915402.html
- Android layout個別屬性的區別[摘 from:http://www.cnblogs.com/playing/archive/2011/04/07/2008620.html]
- CImage类 from http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html
- [转-来自啊泰]推模式下dataset1下显示的是"...未找到项目..." 问题的解决[补充] [http://www.cnblogs.com/babyt/archive/2005/04/15/138588.html]
- 转载Android常见错误(http://www.cnblogs.com/ok-lanyan/archive/2011/10/12/2208378.html)
- C#中Dictionary的用法及用途 原文转载自:http://www.cnblogs.com/linzheng/archive/2010/12/13/1904709.html
- 解决:无法连接到 WMI 提供程序。您没有权限或者该服务器无法访问。 (转帖:http://www.cnblogs.com/furenjun/archive/2011/09/01/2161873.html)