我正在尝试制作一个新的TBitmap32对象:
Bmp32 := TBitmap32.Create;
Bmp32.SetSize(20000,20000);
,我得到了错误: “无法分配DIB句柄”
如何解决此问题? 20K x 20K位图不是很大。它小于1.5 GB。
答案 0 :(得分:1)
这是对基础GDI接口的限制,您无能为力(据我所记得,它在不同操作系统之间往往有所不同)。
这就是说,并不是所有的东西都会丢失,因为您可以使用TMemoryBackend或TMMFBackend(均在GR32_Backends_Generic中定义)创建位图,也可以尝试TGDIMemoryBackend,它本质上是TMemoryBackend,但仍允许在屏幕上绘制位图。 (而其他后端则不直接提供此功能)。
要创建具有不同后端的位图,您只需要像这样将后端类作为参数传递:
BigBitmap := TBitmap32.Create(TMemoryBackend)
或
BigBitmap := TBitmap32.Create(TGDIMemoryBackend)
最终,您必须将图像存储在非可视内存位图中,然后将可视部分复制到屏幕上。这有点丑陋,但是您不再依赖GDI,这更加丑陋,因为您永远不知道它是否可以在客户的计算机上工作。