функция ImageGadget
|
|
Vitamin | Дата: Воскресенье, 16.03.2025, 20:20 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Offline
| При использовании манифеста возникает проблема с прозрачностью картинок, то есть в этих местах получается светлое заполнение. Можно ли как-то это поправить? Не удалось прикрепить архив с примером на пару КБ, поэтому добавляю в base64. ImageGadget.b64 Цитата MIME-Version: 1.0 Content-Type: application/octet-stream; name="ImageGadget.zip"
Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ImageGadget.zip"
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 Заметил, что если переместить окно за заголовок, то светлый ореол вокруг картинок исчезает и всё становится как надо. Только это работает не стабильно: не всегда и не на всех картинках. С этим примером не срабатывает. Может нужно какой-то функцией делать перерисовку?
Сообщение отредактировал Vitamin - Понедельник, 17.03.2025, 12:08 |
|
| |
DarkDemon | Дата: Понедельник, 17.03.2025, 18:18 | Сообщение # 2 |
Полковник
Группа: Друзья
Сообщений: 218
Статус: Offline
| На всякий: https://base64.guru/converter/decode/file (+вложение для x64 вместе с window9, чтобы на чистом компиле 1.10.1 запустилось).
А что в данном случае делает этот манифест? Просто без него не собирается.
|
|
| |
Vitamin | Дата: Понедельник, 17.03.2025, 18:30 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Offline
| DarkDemon, Цитата Просто без него не собирается Чтобы отключить манифест нужно убрать его из файла ресурсов.
|
|
| |
DarkDemon | Дата: Понедельник, 17.03.2025, 18:41 | Сообщение # 4 |
Полковник
Группа: Друзья
Сообщений: 218
Статус: Offline
| А вот оно как. Убрал его из ресурсов. Заметил странную картину как написано
Код значение &hf0f0f0 - для прозрачности
Так вот у меня на Win7 оно не срабатывает. Вокруг картинки более яркий фон. Видимо прозрачноcть как-то по другому надо имплементить. И да зашёл в GIMP проверил, прозрачность в файле есть. Надо справку по Window9 найти.
|
|
| |
Vitamin | Дата: Понедельник, 17.03.2025, 19:24 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Offline
| В качестве временного решения я переделал картинки: вместо прозрачности сделал заливку цветом f0f0f0. Решение не универсальное, так как цвет окон может измениться и тогда будет некрасиво. Или как вариант перерисовывать такие картинки при загрузке проги, меняя в ней цвета под текущие цвета окна, правда не знаю возможно ли это.
|
|
| |
haav | Дата: Понедельник, 17.03.2025, 20:15 | Сообщение # 6 |
 Генералиссимус
Группа: Администраторы
Сообщений: 1404
Статус: Offline
| Да есть такая фигня с Load_image. От версии к версии винды , почему-то функции GDI+ ведут себя по разному. Получается , что еще и манифест влияет...
Я могу посоветовать следующее: в собственный код (не в код библиотеки) внеси код слегка отредактированной версии Load_Image:
Код #include once "window9.bi"
' где-то сверху кода разместить этот участок кода:
Using GDIPLUS
Dim shared ULONG_PTR_01 AS ULONG_PTR DIM GDIPLUSSTARTUPINPUT_01 AS GDIPLUSSTARTUPINPUT GDIPLUSSTARTUPINPUT_01.GdiplusVersion = 1 IF (GDIPLUSSTARTUP(@ULONG_PTR_01, @GDIPLUSSTARTUPINPUT_01, NULL) <> 0) THEN PRINT "FAIL" End If
Function Load_Image(byref sName as USTRING, ByVal ColorBack As Integer) as HBITMAP Export DIM AS PVOID PTR GPIMAGE_01 Dim hhbitmap As HBITMAP #ifdef UNICODE IF (GDIPLOADIMAGEFROMFILE( *sName, Cast(Any Ptr,@GPIMAGE_01)) <> 0) THEN PRINT "FAIL" End If #else Var blen = (Len(sName)*2)+2 Dim As WString Ptr wbuf wbuf = Allocate( blen ) if wbuf = 0 then return 0 MultiByteToWideChar(CP_ACP, 0, StrPtr(sName), -1, wbuf, blen) IF (GDIPLOADIMAGEFROMFILE( *wbuf, Cast(Any Ptr,@GPIMAGE_01)) <> 0) THEN PRINT "FAIL" End If DeAllocate(wbuf) #EndIf 'If LOBYTE(LOWORD(GetVersion)) <6 Then DIM AS PVOID PTR GPIMAGE_02,GpGraphics Dim As long w,h GdipGetImageWidth(Cast(Any Ptr,GPIMAGE_01),@w) GdipGetImageHeight(Cast(Any Ptr,GPIMAGE_01),@h) GdipCreateBitmapFromScan0(w, h, 0, PixelFormat32bppARGB, NULL, Cast(Any Ptr,@GPIMAGE_02)) GdipGetImageGraphicsContext(Cast(Any Ptr,GPIMAGE_02),Cast(Any Ptr,@GpGraphics)) GdipGraphicsClear(Cast(Any Ptr,GpGraphics),ColorBack or &hff000000) GdipDrawImageRectI(Cast(Any Ptr,GpGraphics),Cast(Any Ptr,GPIMAGE_01),0,0,w,h) GdipCreateHBITMAPFromBitmap(Cast(Any Ptr,GPIMAGE_02),@hhbitmap,ColorBack or &hff000000) If GPIMAGE_02 <> 0 Then GdipDisposeImage(Cast(Any Ptr,GPIMAGE_02)) If GpGraphics <> 0 Then GdipDeleteGraphics(Cast(Any Ptr,GpGraphics)) 'Else 'GdipCreateHBITMAPFromBitmap(Cast(Any Ptr,GPIMAGE_01) ,@hhBitmap,ColorBack or &hff000000) 'EndIf GdipDisposeImage(Cast(Any Ptr,GPIMAGE_01)) Return hhbitmap end Function
'------ '------ '------
'Ну и здесь или где-то ниже собственно вызываем как обычно Load_Image
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Понедельник, 17.03.2025, 21:27 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Offline
| haav Да, спасибо, помогло для Load_Image, а как быть с LoadImageFromResource и Load_icon?
|
|
| |
DarkDemon | Дата: Вторник, 18.03.2025, 05:31 | Сообщение # 8 |
Полковник
Группа: Друзья
Сообщений: 218
Статус: Offline
| Vitamin, Так у вас прозрачность заработала? Или что? О чём речь? Уточню, на Win7 прозрачности нет. Можно ваш код посмотреть?
Если что я пробовал и так:
Код SetWindowLong(Gadgetid(1), GWL_EXSTYLE, GetWindowLong(Gadgetid(1), GWL_EXSTYLE) OR WS_EX_LAYERED) SetLayeredWindowAttributes(Gadgetid(1), 0, 0, LWA_COLORKEY)
И так:
Код DIM ElmDC AS HDC = GetDC(Gadgetid(2)) SetBkMode (ElmDC, TRANSPARENT) SetBkColor (ElmDC, 0) ReleaseDC(Gadgetid(2), ElmDC) ElmDC = GetDC(Gadgetid(1)) SetBkMode (ElmDC, TRANSPARENT) SetBkColor (ElmDC, 0) ReleaseDC(Gadgetid(1), ElmDC)
Один хрен. Подвинул один имадж на другой, на форме они непрозрачны. Скрин для убедительности.
Сообщение отредактировал DarkDemon - Вторник, 18.03.2025, 05:47 |
|
| |
DarkDemon | Дата: Вторник, 18.03.2025, 05:39 | Сообщение # 9 |
Полковник
Группа: Друзья
Сообщений: 218
Статус: Offline
| Скрин в прошлом сообщ без манифеста, с манифестом ещё хуже.

Добавлено (18.03.2025, 05:45) --------------------------------------------- Если что цвет формы можно получить так.
Код DIM MyHWND AS HWND = OpenWindow("1",300,10,200,200)
DIM DCForBkCv AS HDC = GetDC(MyHWND) DIM SHARED FormBack AS COLORREF FormBack = GetPixel(DCForBkCv, 1, 1) ReleaseDC(MyHWND, DCForBkCv)
Хоть и понятно что не решает вопрос прозрачности.
Сообщение отредактировал DarkDemon - Вторник, 18.03.2025, 05:47 |
|
| |
haav | Дата: Вторник, 18.03.2025, 06:29 | Сообщение # 10 |
 Генералиссимус
Группа: Администраторы
Сообщений: 1404
Статус: Offline
| Цитата Vitamin (  ) Да, спасибо, помогло для Load_Image, а как быть с LoadImageFromResource и Load_icon?
С функцией LoadImageFromResource поступить так же как с Load_image (комментируется участок кода по аналогии)
Неужели и она с манифестом тоже косячит? Это же вообще обертка на чистую GDI функцию LoadImage. Есть конечно еще одна WinApi функция LoadIcon , но она грузит иконки из ресурсов. Может стоит попробовать ее?
Цитата Скрин в прошлом сообщ без манифеста, с манифестом ещё хуже.
На это вообще не знаю , что сказать. Что же там Леха за настройки у тебя такие?
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
DarkDemon | Дата: Вторник, 18.03.2025, 06:58 | Сообщение # 11 |
Полковник
Группа: Друзья
Сообщений: 218
Статус: Offline
| Цитата haav (  ) На это вообще не знаю , что сказать. Что же там Леха за настройки у тебя такие? Компиль 64 бит 1.10.1, архив выше с твоей библой. Винда 7 довольно стандартная(Ultimate SP1), без Aero с классической темой.
Твою функцию переименовал и убрал к.с. export, чтобы исключить любые конфликты.
Да ничего особенного, я не знаю в чём дело.
Код полностью:
Код #include once "window9.bi"
USING GDIPLUS
DIM SHARED ULONG_PTR_01 AS ULONG_PTR DIM GDIPLUSSTARTUPINPUT_01 AS GDIPLUSSTARTUPINPUT GDIPLUSSTARTUPINPUT_01.GdiplusVersion = 1 IF (GDIPLUSSTARTUP(@ULONG_PTR_01, @GDIPLUSSTARTUPINPUT_01, NULL) <> 0) THEN PRINT "FAIL" END IF
FUNCTION Load_ImageNew(BYREF sName AS USTRING, BYVAL ColorBack AS ULONG) AS HBITMAP
DIM AS PVOID PTR GPIMAGE_01 DIM hhbitmap As HBITMAP
#IFDEF UNICODE
IF (GDIPLOADIMAGEFROMFILE( *sName, Cast(Any Ptr,@GPIMAGE_01)) <> 0) THEN PRINT "FAIL" END IF
#ELSE
VAR blen = (LEN(sName) * 2) + 2 DIM AS WSTRING PTR wbuf wbuf = ALLOCATE( blen ) IF wbuf = 0 THEN RETURN 0 MultiByteToWideChar(CP_ACP, 0, StrPtr(sName), -1, wbuf, blen) IF (GDIPLOADIMAGEFROMFILE( *wbuf, CAST(ANY PTR, @GPIMAGE_01)) <> 0) THEN PRINT "FAIL" END IF DEALLOCATE(wbuf)
#ENDIF
DIM AS PVOID PTR GPIMAGE_02, GpGraphics DIM AS LONG w,h
GdipGetImageWidth(CAST(ANY PTR, GPIMAGE_01), @w) GdipGetImageHeight(CAST(ANY PTR, GPIMAGE_01), @h)
GdipCreateBitmapFromScan0(w, h, 0, PixelFormat32bppARGB, NULL, CAST(ANY PTR, @GPIMAGE_02))
GdipGetImageGraphicsContext(CAST(ANY PTR, GPIMAGE_02),CAST(ANY PTR, @GpGraphics))
GdipGraphicsClear(CAST(ANY PTR, GpGraphics), ColorBack or &hff000000) GdipDrawImageRectI(CAST(ANY PTR, GpGraphics), CAST(ANY PTR, GPIMAGE_01), 0, 0, w, h)
GdipCreateHBITMAPFromBitmap(CAST(ANY PTR, GPIMAGE_02),@hhbitmap, ColorBack OR &hff000000)
IF GPIMAGE_02 <> 0 THEN GdipDisposeImage(CAST(ANY PTR, GPIMAGE_02)) IF GpGraphics <> 0 THEN GdipDeleteGraphics(CAST(ANY PTR, GpGraphics))
GdipDisposeImage(Cast(Any Ptr,GPIMAGE_01)) RETURN hhbitmap END FUNCTION
DIM Event AS INTEGER DIM MyHWND AS HWND = OpenWindow("1",300,10,200,200) ' Вставка из справки Window9 #IFDEF __FB_WIN32__ VAR iStyle = SS_ICON #ELSE VAR iStyle = 0 #ENDIF
ImageGadget(1, 30, 30, 26, 26, Load_imageNew("1.png", 0), , SS_BITMAP) ImageGadget(2, 35, 35, 26, 26, Load_icon("1.ico"), , iStyle)
DO Event = WaitEvent()
SELECT CASE Event
CASE EventClose
END
CASE EventGadget
SELECT CASE EventNumber CASE 1 MessBox("","это 1") CASE 2 MessBox("","это 2") END SELECT
END SELECT LOOP
Сообщение отредактировал DarkDemon - Вторник, 18.03.2025, 07:04 |
|
| |
haav | Дата: Вторник, 18.03.2025, 08:59 | Сообщение # 12 |
 Генералиссимус
Группа: Администраторы
Сообщений: 1404
Статус: Offline
| Я понял в чем дело. Это баг библиотеки. Для исправления:
1) файл во вложении заменить 2) пересобрать библиотеку
Это должно исправить проблему и даже не нужно будет париться с Load_Image.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Вторник, 18.03.2025, 11:44 | Сообщение # 13 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Offline
| haav, Теперь всё отлично, спасибо.
|
|
| |
DarkDemon | Дата: Вторник, 18.03.2025, 12:28 | Сообщение # 14 |
Полковник
Группа: Друзья
Сообщений: 218
Статус: Offline
| Стас, а ты на какой винде проверяешь?
Event.bas заменил, сбилдил библу, положил в папку с проектом.
В вышеприведённом коде делаю такую последовательность
Код TextGadget(1,10,10,80,30,"Test text") ImageGadget(2, 35, 35, 26, 26, Load_icon("1.ico"), , iStyle) ImageGadget(3, 30, 30, 26, 26, Load_image("1.png"), , SS_BITMAP)
Если просто запустить не заводя форму за экран и не выводя её обратно, то видим это:

Если выводить форму за экран и обратно, то видим это:

В любом из случаев прозрачности нет, но подсвечивание белым по краям у красного значка - исчезло, теперь оно красит цветом формы. В общем интересный косяк. Хотя вроде раньше оно так же и работало, я просто никогда наслоением не пользовался. Это с манифестом ТС-а. Во всех прошлых сообщениях я принудительно выводил форму за экран и обратно, для её перерисовки.
Сообщение отредактировал DarkDemon - Вторник, 18.03.2025, 12:32 |
|
| |
haav | Дата: Вторник, 18.03.2025, 19:00 | Сообщение # 15 |
 Генералиссимус
Группа: Администраторы
Сообщений: 1404
Статус: Offline
| Цитата DarkDemon (  ) Стас, а ты на какой винде проверяешь?
Win10
Цитата В любом из случаев прозрачности нет
Конечно нет. Весь механизм работы в том , чтобы для реальных прозрачных пикселей из PNG определить цвет , который сливается с фоном под рисунком. Если окно имеет белый цвет , и мы указали в функции тоже белый цвет , то прозрачные пиксели в GDI+ битмапе заменяются на пиксели белого цвета в GDI битмапе (при преобразовании битмапа из GDI+ в GDI). И уж потом мы GDI битмап пихаем в ImageGadget. Мы не можем в ImageGadget (ака Static control) запихать GDI+ битмап , хоть нам бы это очень бы и хотелось. Другой вопрос , а почему же не сделали такую возможность MS? Для GDI битмапов сделали , а для GDI+ битмапов нет. Наверное они посчитали такой способ (отправка сообщения STM_SETIMAGE) устаревшим. Типа пусть рисуют GDI+ сами на нужном Controls и следят за перерисовкой и пр. Так в принципе и делают. А мне нравится , когда отправил битмап в ImageGadget и больше не думаешь о том , как он там рисуется/перерисовывается (все на совести внутреннего обработчика MS).
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|