graphics32 - Graphics32:TBitmap32 和错误“无法分配 DIB 句柄”
问题描述
我正在尝试制作一个新的 TBitmap32 对象:
Bmp32 := TBitmap32.Create;
Bmp32.SetSize(20000,20000);
我收到错误:“无法分配 DIB 句柄”
我该如何解决这个问题?20K x 20K 位图并没有那么大。它小于 1.5 GB。
解决方案
这是底层 GDI 接口的限制,您无能为力(据我所知,它往往因操作系统而异)。
这就是说,并非所有内容都会丢失,因为您可以使用 TMemoryBackend 或 TMMFBackend(均在 GR32_Backends_Generic 中定义)创建位图,或者您可以尝试 TGDIMemoryBackend,它本质上是一个 TMemoryBackend,但仍然允许在屏幕上绘制位图(而其他后端不直接提供此功能)。
要创建具有不同后端的位图,您只需将后端类作为参数传递,如下所示:
BigBitmap := TBitmap32.Create(TMemoryBackend)
或者
BigBitmap := TBitmap32.Create(TGDIMemoryBackend)
最终,您必须将图像存储在非可视内存位图中,并将可视部分复制到屏幕上。这有点难看,但是您不再依赖 GDI,这更难看,因为您永远不知道它是否可以在客户的机器上运行。
推荐阅读
- docker - 从单个 docker 文件构建多个 docker 映像
- typescript - typescript 对同一范围内的同一变量具有不同的类型
- node.js - 如何将类/对象从 NODE-EJS 传递到模板?
- avro - Avro 指纹模式
- javascript - 需要的 HTML Bootstrap 属性不起作用
- css - CSS 自定义属性优先级
- javascript - React native:在路径数组上使用地图显示图像不起作用
- python - 在不安装库的情况下在 Python 中发送 curl POST 请求
- php - 将联合与laravel一起使用时如何获得两个不同表的总和
- python - 为什么我的 python 代码出现内部服务器错误?