首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理大型位图(最高3 3GB)

处理大型位图(最高3 3GB)
EN

Stack Overflow用户
提问于 2012-06-17 01:43:26
回答 3查看 6K关注 0票数 6

我正在做一个大学项目,结果被记忆问题卡住了。我用下面的代码在硬盘上加载了一个大约需要1.5 on的位图:

代码语言:javascript
复制
Bitmap bmp = new Bitmap(pathToFile); 

问题是,新创建的Bitmap对象使用了大约3.5 is的RAM,这是我不能理解的(这是一个很大的包装器:E)。我需要找到像素数组,使用Bitmap类真的很有帮助(我稍后使用LockBits()方法,逐字节处理数组字节),但在本例中它是完全阻塞的。所以我的问题是:

有没有什么简单的方法来提取像素阵列,而不需要额外借出2 2gb?

我使用c#只是为了提取所需的数组,该数组稍后在c++中处理-也许我可以在c++中提取所有需要的数据(但这里出现了转换问题-我专注于24bgr格式)?

PS:我需要将整个位图保存在内存中,所以将它分成几个部分是没有解决办法的。

PS2:只是为了澄清一些问题:我知道文件扩展名和文件格式之间的区别。加载的文件是未压缩的位图,每像素3字节,大小约为1.42 is (16k x 32k像素),那么为什么bitmap对象要大两倍以上呢?任何解压和转换成其他格式的问题都不会发生。

EN

回答 3

Stack Overflow用户

发布于 2012-06-17 01:48:00

考虑使用内存映射文件来访问您的巨大数据:)。可以在这里找到一个专注于您所需的示例:http://visualstudiomagazine.com/articles/2010/06/23/memory-mapped-files.aspx它是在托管代码中,但您也可以从等效的本机代码中使用它。

如果你需要更多细节,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2013-10-16 19:52:08

您可以使用此解决方案,在C# http://www.codeproject.com/Tips/240428/Work-with-bitmap-faster-with-Csharp中更快地处理位图

或者,您可以使用内存映射文件

http://visualstudiomagazine.com/articles/2010/06/23/memory-mapped-files.aspx

票数 0
EN

Stack Overflow用户

发布于 2017-11-22 08:28:32

您可以停止内存缓存。

而不是

Bitmap bmp = new Bitmap(pathToFile);

使用

var bmp = (Bitmap)Image.FromStream(sourceFileStream, false, false);

请参阅https://stackoverflow.com/a/47424918/887092

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11065689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档