Graphics32: TBitmap32 и ошибка «Не удается выделить дескриптор DIB» - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь создать новый объект TBitmap32:

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

и я получаю ошибку: «Не удается выделить дескриптор DIB»

Как я могу исправить эту проблему? Растровое изображение 20K x 20K не такое большое. Это меньше, чем 1,5 ГБ.

1 Ответ

1 голос
/ 21 марта 2019

Это предел базового интерфейса GDI, и вы мало что можете сделать (насколько я помню, он отличается от ОС к ОС).

При этом не все потеряно, так как вы можете создать растровое изображение с помощью TMemoryBackend или TMMFBackend (оба определены в GR32_Backends_Generic), или вы можете попробовать TGDIMemoryBackend, который по сути является TMemoryBackend, но все же позволяет рисовать растровое изображение на экране (тогда как другие серверы не предлагают это напрямую).

Чтобы создать растровое изображение с другим бэкэндом, вам нужно только передать класс бэкэнда в качестве параметра, подобного этому:

BigBitmap := TBitmap32.Create(TMemoryBackend)

или

BigBitmap := TBitmap32.Create(TGDIMemoryBackend)

В конце концов вы должны сохранить свое изображение в невизуальной памяти и просто скопировать визуальную часть на экран. Это немного некрасиво, но вы больше не полагаетесь на GDI, который еще более уродлив, поскольку вы никогда не знаете, работает ли он на компьютерах ваших клиентов.

...