【问题标题】:Graphics32: TBitmap32 and error "Can't allocate the DIB handle"Graphics32:TBitmap32 和错误“无法分配 DIB 句柄”
【发布时间】:2019-08-11 11:18:44
【问题描述】:

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

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

我得到错误: "无法分配 DIB 句柄"

我该如何解决这个问题? 20K x 20K 位图并没有那么大。它小于 1.5 GB。

【问题讨论】:

    标签: graphics32


    【解决方案1】:

    这是底层 GDI 接口的限制,您无能为力(据我所知,它往往因操作系统而异)。

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

    要创建具有不同后端的位图,您只需将后端类作为参数传递,如下所示:

    BigBitmap := TBitmap32.Create(TMemoryBackend)
    

    BigBitmap := TBitmap32.Create(TGDIMemoryBackend)
    

    最终,您必须将图像存储在非可视内存位图中,并将可视部分复制到屏幕上。这有点难看,但您不再依赖 GDI,这更难看,因为您永远不知道它是否适用于您客户的机器。

    【讨论】:

    • 谢谢!这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2020-04-26
    相关资源
    最近更新 更多