Вопрос

MSDN отображает следующее для CreatePatternBrush:

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

Мой вопрос противоположный.Если HBRUSH прослужит долго, могу ли я удалить HBITMAP сразу после создания кисти?ИЕ:хранит ли HBRUSH собственную копию HBITMAP?

В этом случае я бы хотел, чтобы у HBRUSH была область действия объекта, а у HBITMAP — область действия метода (метода, который создает HBRUSH).

Это было полезно?

Решение

HBRUSH и HBITMAP полностью независимы.Дескрипторы можно удалять совершенно независимо друг от друга, и после создания никакие изменения ни в одном объекте не повлияют на другой.

Другие советы

Кисть имеет собственную копию растрового изображения.Это легко увидеть, удалив растровое изображение после создания кисти, а затем используя кисть (работает нормально).

Однако использование GetObject для заполнения структуры LOGBRUSH вернет исходный дескриптор BITMAP в члене lbhatch, а не дескриптор копии, к сожалению.И использование GetObject для возвращенного дескриптора растрового изображения не удастся, если растровое изображение будет удалено.

Кто-нибудь знает, как в этом случае получить исходные размеры растрового изображения от кисти?Я хочу создать копию узорчатой ​​кисти, даже если исходное растровое изображение удалено.Я могу получить копию исходного растрового изображения, просто рисуя кистью, но не знаю ее размера.Я попробовал использовать SetbrushorgEx (hdc, -1, -1), надеясь, что -1 уменьшится по модулю его размеров, когда кисть выбрана в контексте устройства, и получу значения, когда я получу с помощью GetBrushOrgEx.Не работает.

Я думаю, что растровое изображение должно пережить кисть:кисть просто ссылается на существующее растровое изображение, а не копирует его.

Вы всегда можете попробовать и посмотреть, что получится.

Я сомневаюсь, что API CreatePatternBrush() копирует предоставленное вами растровое изображение, поскольку HBITMAP:

  1. дескриптор GDI, максимальное количество которых ограничено, и
  2. потенциально весьма велик.

Win32 и GDI, как правило, консервативны в создании внутренних копий ваших данных, хотя бы потому, что, когда было создано большинство их API (CreatePatternBrush() датируется Windows 95, а многие функции еще старше), память и дескрипторы GDI были в гораздо большем объеме. ограниченное предложение, чем сейчас.(Например, Windows 95 должна была хорошо работать в системе с объемом оперативной памяти всего 4 МБ.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top