【问题标题】:Is there a way to create a bitmap in fragments in C#?有没有办法在 C# 中的片段中创建位图?
【发布时间】:2016-09-03 09:34:19
【问题描述】:

我正在尝试创建一个巨大的位图 52000x29250 PixelFormat.Format32bppPArgb,这是不可能的,因为它需要大约 24.3GB 的 RAM。那么我能否以某种方式在片段中创建位图并从这些片段中创建一个巨大的位图?

【问题讨论】:

标签: c# bitmap


【解决方案1】:

答案是您永远不需要将位图加载到内存中。只需将其视为字节文件流。构造一个读取器/写入器类来处理实际的位图二进制格式,并使用该读取器/写入器类来寻址位图数据。

这允许您以高效内存的方式构建和处理任意比例的位图。您可以通过增加流缓存来调高和调低性能。

大规模位图处理的关键是像处理数据库一样处理它;没有程序员将整个数据库读入内存;所以你不需要为位图做。

PixelFormat.Format32bppPArgb 位图的格式有据可查,如果您四处搜索,您可能会发现现有的读取器/写入器类。

【讨论】:

  • Bitmap 的格式有据可查 你是指 Bitmap 还是 BMP?
  • PixelFormat.Format32bppPArgb 是一个有据可查的格式。为了清楚起见,更新了答案。
  • 嗯,是的,但它不是一种文件格式。一些压缩方案需要访问整个图像来进行统计。我想知道这如何转化为流 IO;只是好奇..
  • 啊,文件格式可能不同——例如,OP 可能使用 DDS 等 DirectX 格式,但我猜他们使用的是 BMP 或 JPG。 reader/writer 类需要知道物理文件格式,但是任何应用于从流中提取的位图数据的算法都是基于它的 PixelFormat。
猜你喜欢
  • 2014-05-02
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多