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

时间:2012-04-05 16:53:42

标签: delphi graphics png bmp

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

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

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

1 个答案:

答案 0 :(得分:1)

区别在于压缩。

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

这在编程圈中有超过1种节省...

  1. 加载图像会导致将较少的原始数据加载到ram中。
  2. 您正在处理较少的原始数据,因此您需要的资源更少。
  3. 平铺意味着你的问题是指数式的,例如......

    44MB x 10个瓷砖= 440MB

    Vs的

    3MB x 10个瓷砖= 30MB

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

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

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

    然而......我认为这是一个可选择的东西,你可以调整(我认为它因打印机而异)。

    编辑:

    来自游戏编程世界的东西:

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