Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
Не всегда имеет смысл хранить первоначальный Bitmap. Могу ошибаться, мне кажется, что при вызове _GDIPlus_Shutdown они должны бы удалятся.
А при получении HBITMAP функцией _SendMessage($hWnd, 0x0173), первоначального Bitmap вообще может не быть.
asdf8, здесь есть много нюансов. Поэтому я и спрашиваю какова конечная цель этих преобразований. Битмап нужен для вставк и в WS_EX_LAYERED окно или в GUI? Можно более подробно расписать задачу?
Битмап мне нужен, чтобы провести с ним матричные преобразования (_GDIPlus_ColorMatrix... из GDIP UDF), перевести его в HBITMAP, и далее уже пользоваться им для вставки в GUICtrlCreatePic.
В этом случае хранишь в памяти последний битмап GDI+, а в Pic вставляешь DIB c помощью SendMessage(). Если изображение содержит прозрачность, то необходимо будет обновлять часть основного окна под Pic, чтобы не было наложений. Но это спровоцирует мерцания. Чтобы избежать мерцаний я рекомендую вставлять в Pic не "прозрачную" картинку, а с таким же фоном, что и у основного окна (если возможно).
P.S
Для WS_EX_LAYERED окна нужно использовать DDB - _GDIPlus_BitmapCreateHBITMAPFromBitmap().
P.S.S
_GDIPlus_BitmapCreateFromHBITMAP() не поддерживает прозрачность.
Добавлено:
Сообщение автоматически объединено:
Кстати, если ты "схлопнешь" изображение с фоном, то достаточно будет использовать _GDIPlus_BitmapCreateHBITMAPFromBitmap() для вставки в Pic.
Yashied
Спасибо. Может это добавить в НЕофициальный FAQ AutoIt?
Правда в моем случае трудно хранить битмап GDI+, во-первых он действительно разрушается при вызове _GDIPlus_Shutdown, во-вторых HBITMAP является вырезкой из битмапа GDI+ (каждый раз вырезать - довольно накладно по времени). И фон у меня - картинка. Поэтому и нужна была функция _GDIPlus_BitmapCreateFromHBITMAP с поддержкой прозрачности.
_GDIPlus_Shutdown() вообще не нужна (Windows автоматически все уничтожает при завершении процесса), ну или вызывать один раз перед выходом из программы.
asdf8 сказал(а):
...во-вторых HBITMAP является вырезкой из битмапа GDI+ (каждый раз вырезать - довольно накладно по времени).
Нет, не накладно. В любом случае, если изначальный битмап GDI+ еще нужен, то лучше хранить его в памяти для последующего использования. Если нужна вырезка, то можно хранить ее, но конвертить туда-сюда, это неправильный подход.
asdf8 сказал(а):
И фон у меня - картинка. Поэтому и нужна была функция _GDIPlus_BitmapCreateFromHBITMAP с поддержкой прозрачности.
Если картинка статичная, то лучше в качестве фона использовать соответствующую часть этой картинки аккурат под Pic. Это справедливо, если планируется анимация, дабы избежать мерцаний. Если изображение в Pic вставляется один раз и на долго, то можно обойтись DIB с прозрачностью, и после очередного обновления вызывать _WinAPI_InvalidateRect() для родительского окна с указанием размера Pic.