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

#graphics32

#graphics32

Вопрос:

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

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

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

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

Ответ №1:

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

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

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

 BigBitmap := TBitmap32.Create(TMemoryBackend)
  

или

 BigBitmap := TBitmap32.Create(TGDIMemoryBackend)
  

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

Комментарии:

1. Спасибо! Это очень помогает!