【发布时间】:2009-08-19 16:42:38
【问题描述】:
在 Delphi 7 中,我必须处理相当大的 24bpp 位图(几个 100 MB)。由于我想使用 Graphcis32 库进行进一步处理,因此必须将它们转换为 32bpp (TBitmap32)。然而,TBitmap32 的 LoadFromFile 方法会创建一个临时的常规 TBitmap 来加载原始 24bpp 位图,然后将其分配给 TBitmap32 以进行所需的格式转换。当然,通过在内存中放置两个这样的巨大位图,内存负载大约会增加一倍,这对我的应用程序来说可能是致命的。
我在想的是一种将 24bpp 位图加载到预分配缓冲区中的方法,该缓冲区的尺寸使得 32 bpp 位图适合。然后,从缓冲区端开始,我想将 RGB 字节移动到偏移量需要 32bpp。
这可能吗?如何将位图加载到预分配的缓冲区中?有什么想法吗?
【问题讨论】:
-
您能否解释一下为什么这对您的应用程序可能是致命的?一点点内存分页可能会显示一点性能下降,但为什么会致命?
-
@Ken:他想避开副本。只分配一次大缓冲区,将(较小的)24bpp 位图读入缓冲区并就地进行所有转换。
标签: delphi bitmap graphics32