我需要编辑(增加高度)图像。 该文件大部分为5000 * 4000。当我创建一个大尺寸的bmp并在bmp实例上调用Graphics.DrawImage方法时,我发现内存已经达到峰值水平。使用大型位图会导致内存不足异常
如何摆脱内存不足异常?有没有办法在C#中使用大型位图?
我需要编辑(增加高度)图像。 该文件大部分为5000 * 4000。当我创建一个大尺寸的bmp并在bmp实例上调用Graphics.DrawImage方法时,我发现内存已经达到峰值水平。使用大型位图会导致内存不足异常
如何摆脱内存不足异常?有没有办法在C#中使用大型位图?
这取决于你的应用程序特定requeirements,它不是从上你的帖子很清楚,但generaly,大的媒体文件(图片,声音,视频)工作,我觉得真的很不错的解决方案是
在内存映射文件中将yuor映像保存在磁盘上,并通过免费的yuor RAM尽可能地从大量数据中调整磁盘的大小,这些数据可能不需要快速访问(至少在那一刻)
希望这会有所帮助。 此致敬礼。
这并不容易.net –
这比以前更容易了,相信我,因为现在你已经包装了.NET类。 (仅适用于.NET Framework 4.0) – Tigran
OOM从不*由RAM耗尽引起。位图已经使用MMF,创建更多只是让您更快地用完虚拟内存。 –
问题是操作所需的大量内存。你的需求约为千兆字节,所以解决方案可以是使用流并以块为单位处理文件。
或者最好的选择是使用它的一些第三方库。下面是一些对.NET
也看看这太问题。
https://stackoverflow.com/questions/158756/what-is-the-best-image-manipulation-library
你能提供一些代码吗? – VMAtm
它的一个内存问题检查这个http://stackoverflow.com/questions/5801652/bitmap-while-assigning-height-width-crashes/5802113#5802113 – V4Vendetta
我想你有同样的问题,当你试图采取其他人有超过一个GB的内存为.dll。可能的答案可能是使用流并以块处理文件。 –