Graphics32:TBitmap32和错误“无法分配DIB句柄”

时间:2019-03-20 16:56:37

标签: graphics32

我正在尝试制作一个新的TBitmap32对象:

  Bmp32 := TBitmap32.Create;
  Bmp32.SetSize(20000,20000);

,我得到了错误: “无法分配DIB句柄”

如何解决此问题? 20K x 20K位图不是很大。它小于1.5 GB。

1 个答案:

答案 0 :(得分:1)

这是对基础GDI接口的限制,您无能为力(据我所记得,它在不同操作系统之间往往有所不同)。

这就是说,并不是所有的东西都会丢失,因为您可以使用TMemoryBackend或TMMFBackend(均在GR32_Backends_Generic中定义)创建位图,也可以尝试TGDIMemoryBackend,它本质上是TMemoryBackend,但仍允许在屏幕上绘制位图。 (而其他后端则不直接提供此功能)。

要创建具有不同后端的位图,您只需要像这样将后端类作为参数传递:

BigBitmap := TBitmap32.Create(TMemoryBackend)

BigBitmap := TBitmap32.Create(TGDIMemoryBackend)

最终,您必须将图像存储在非可视内存位图中,然后将可视部分复制到屏幕上。这有点丑陋,但是您不再依赖GDI,这更加丑陋,因为您永远不知道它是否可以在客户的计算机上工作。