8

我在 Delphi 中编写了一个映射程序,用户可以在后台加载我存储在内存中的光栅图像。在一种情况下,用户成功加载了 44MB BMP,但程序运行缓慢,当他们打印(我平铺输出)时,他们得到了资源不足错误。我将 BMP 转换为 PNG (3MB),程序执行得更好,打印作业成功。

由于 PNG 必须扩展为相同大小的 DIB,为什么会有性能/资源差异?如果有的话,加载 PNG 应该需要更多的工作和内存分配。我错过了什么?

由于似乎没有任何明显的答案,我将编写一个小型演示项目,以便进一步研究。

4

1 回答 1

1

区别在于压缩。

BMP = 与 PNG 一样的原始数据 = 使用“无损”压缩的相同原始数据

这在编程界节省了不止一种方式......

  1. 加载图像会导致将更少的原始数据加载到内存中。
  2. 然后,您将处理更少的原始数据,因此您需要更少的资源。

平铺意味着您的问题是指数级的,例如...

44MB x 10 块 = 440MB

VS

3MB x 10 块 = 30MB

打印机不喜欢处理大量数据,除了更昂贵的打印机外,所有打印机都倾向于一次性打印整个文档(例如缓冲整个流)。

因此,从您的应用程序中,用户说“打印”......然后您的代码说“对,我要发送 10 个副本”并且打印机开始“缓存”440MB 的原始数据。

大多数常见的家用打印机都依靠 pc 来进行缓存并打印给定的内容,但标准的办公室打印机将进行缓存然后打印文档。

但是......我认为这是您可以调整的可选内容(我认为它因打印机而异)。

编辑:

这里有一些来自游戏编程世界的东西:

http://www.gamedev.net/topic/450104-png-vs-bmp/

于 2012-04-12T13:35:45.147 回答