我正在开发一个必须处理大型 bmp 文件的应用程序,这些文件通常太大而无法放入内存。作为我们在项目创建时开发的软件的一部分,我的应用程序将数据从 bmp 文件转换为不同的格式,以便在部分中轻松检索。
目前,由于文件通常太大而无法放入内存,因此软件直接从文件中读取一段字节数据,对其进行处理,然后进入下一段。读取文件的代码与下图类似(为清楚起见进行了简化):
FileStream fs = File.OpenRead(fileName);
fs.Seek(sectionStart, SeekOrigin.Begin);
currentSectionAsBytes = new byte[sectionSize];
fs.Read(currentSectionAsBytes, 0, currentSectionAsBytes.Length);
到目前为止,这一直很好,因为我们使用的文件都具有可被 4 整除的宽度,因此 bmp 文件没有填充。
最近,我们一直在处理不同大小的图像,这些图像在每行数据的末尾都有填充,导致获取的数据是错误的。
我的问题是,有没有人知道直接从文件中获取 bmp 数据的更好方法。如前所述,由于文件很大,我无法从文件中读取位图。目前我最好的想法是,在获得 currentSectionAsBytes 之后,计算填充大小并手动删除它。这似乎太麻烦和复杂了。必须有更好的解决方案。