gpt4 book ai didi

c# - 处理大型位图(最大 3GB)

转载 作者:太空狗 更新时间:2023-10-29 21:58:56 27 4
gpt4 key购买 nike

我正在做一些大学项目,但遇到了内存问题。我使用以下代码在 HDD 上加载了大约 1.5GB 的位图:

Bitmap bmp = new Bitmap(pathToFile); 

问题是新创建的 Bitmap 对象使用了大约 3.5GB 的 RAM,这是我无法理解的(这真的是 BIG 包装器 :E)。我需要获取像素数组,使用 Bitmap 类确实很有帮助(稍后我使用 LockBits() 方法,并按字节处理数组字节),但在这种情况下,它完全是阻碍。所以这是我的问题:

有什么简单的方法可以在不借出额外的 2gb 的情况下提取像素阵列?

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

PS:我需要将整个位图保存在内存中,因此无法将其拆分成多个部分。

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

最佳答案

考虑使用内存映射文件来访问您的海量数据 :)。可以在此处找到专注于您需要的示例:http://visualstudiomagazine.com/articles/2010/06/23/memory-mapped-files.aspx它在托管代码中,但您也可以在等效的 native 代码中使用它。

如果您需要更多详细信息,请告诉我。

关于c# - 处理大型位图(最大 3GB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com