使用PNG的效率与使用大文件的BMP的效率

Mit*_*tch 8 delphi graphics png bmp

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

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

由于似乎没有任何明显的答案我会写一个小的演示项目,所以我可以进一步研究.

War*_*War 1

区别在于压缩。

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

这在编程圈中有不止一种节省方式......

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

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

44MB x 10 块 = 440MB

VS

3MB x 10 块 = 30MB

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

因此,用户从您的应用程序中说“打印”……您的代码然后说“对,我要发送 10 份此内容”,打印机开始“缓存”440MB 的原始数据。

最常见的家用打印机依靠电脑进行缓存并打印所提供的内容,但标准办公打印机将进行缓存然后打印文档。

然而......我认为这是一个可选的东西,你可以调整(我认为它随打印机的不同而变化)。

编辑:

以下是游戏编程领域的一些内容:

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