101

Re: AHK: графика

Точнее, это лучше для решения задачи чем 97?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

102

Re: AHK: графика

Ну тут уже, наверное, тебе решать, какой удобнее.
Через GdipCreateBitmapFromScan0 можно поиграться со значениями PixelFormat:
https://docs.microsoft.com/en-us/dotnet … work-4.7.2

103

Re: AHK: графика

Проще, я имел ввиду - что из двух вариантов может быть теоретически производительнее.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

104

Re: AHK: графика

serzh82saratov пишет:

Точнее, это лучше для решения задачи чем 97?

По-моему, это вообще лишнее:

Malcev пишет:
DllCall("Gdiplus.dll\GdipCreateBitmapFromScan0", "uint", W, "uint", H, "uint", Stride, "uint", 0x26200A, "ptr", Bits, "ptr*", pBitmap2)

Здесь мы получаем Bitmap2, которая та же, что предыдущая pBitmap, из которой получен hBitmap.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

105

Re: AHK: графика

А какие предложишь еще вариаты?
Я засек время мой пример и serzh82saratov работает практически одновременно (мой чуть-чуть быстрее).
Твой вариант из 93 медленнее.

106

Re: AHK: графика


File = D:\Downloads\Иконки\LOWs6vLjqH0.jpg

Gdip_Startup()
pBitmapFile := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmapFile, W, H)   

pBitmap := Gdip_CreateBitmap(W, H)
G := Gdip_GraphicsFromImage(pBitmap)

pBrush := Gdip_BrushCreateSolid(0x88FBD986)
Gdip_FillRoundedRectangle(G, pBrush, 0, 0, W, H, 0) 
Gdip_DeleteBrush(pBrush)
Matrix = 0.5
Gdip_DrawImage(G, pBitmapFile, 0, 0, W, H, 0, 0, W, H, Matrix)

;~ Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow
;~ Gui, Show, Na

;~ hDCBuf := CreateCompatibleDC()
;~ hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap, 0x00000000)
;~ SelectObject(hDCBuf, hBitmap)

;~ UpdateLayeredWindow(hGui, hDCBuf, 0, 0, W, H)

Gdip_SaveBitmapToFile(pBitmap, A_Desktop . "\FinalImage.png")

Run  % A_Desktop . "\FinalImage.png"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

107

Re: AHK: графика

Так тут гуи нету.

108

Re: AHK: графика

В смысле, нету? Оно закомментировано, раскомментируй — будет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

109

Re: AHK: графика

Если я расскоментирую, то мой пример будет чуть быстрее.

110

Re: AHK: графика

Приведи полный код.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

111

Re: AHK: графика

setbatchlines -1
File = C:\Untitled-1.jpg
a := a_tickcount
loop 1000
{
Gdip_Startup()
pBitmapFile := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmapFile, W, H)   

pBitmap := Gdip_CreateBitmap(W, H)
G := Gdip_GraphicsFromImage(pBitmap)

pBrush := Gdip_BrushCreateSolid(0x88FBD986)
Gdip_FillRoundedRectangle(G, pBrush, 0, 0, W, H, 0) 
Gdip_DeleteBrush(pBrush)
Matrix = 0.5
Gdip_DrawImage(G, pBitmapFile, 0, 0, W, H, 0, 0, W, H, Matrix)

 Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow
 Gui, Show, Na

 hDCBuf := CreateCompatibleDC()
 hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap, 0x00000000)
SelectObject(hDCBuf, hBitmap)

 UpdateLayeredWindow(hGui, hDCBuf, 0, 0, W, H)

Gdip_SaveBitmapToFile(pBitmap, "FinalImage.png")
}

time := a_tickcount - a
a := a_tickcount

loop 1000
{
Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmap, W, H)   

hBitmap := CreateDIBSection(W, H)
hDC := CreateCompatibleDC()
SelectObject(hDC, hBitmap)
G := Gdip_GraphicsFromHDC(hDC)

pBrush := Gdip_BrushCreateSolid(0x88FBD986)
Gdip_FillRoundedRectangle(G, pBrush, 0, 0, W, H, 0) 
Gdip_DeleteBrush(pBrush)

Matrix = 0.5
Gdip_DrawImage(G, pBitmap, 0, 0, W, H, 0, 0, W, H, Matrix)
Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow +OwnDialogs +E0x08000000  
Gui, Show, Na

UpdateLayeredWindow(hGui, hDC, 0, 0, W, H)
VarSetCapacity(dib, 104, 0)
DllCall("GetObject", Ptr, hBitmap, "int", A_PtrSize = 8 ? 104 : 84, Ptr, &dib)
Stride := NumGet(dib, 12, "Int")
Bits := NumGet(dib, 20 + (A_PtrSize = 8 ? 4 : 0))
DllCall("Gdiplus.dll\GdipCreateBitmapFromScan0", "uint", W, "uint", H, "uint", Stride, "uint", 0x26200A, "ptr", Bits, "ptr*", pBitmap2)
Gdip_SaveBitmapToFile(pBitmap2, "FinalImage.png")
}
msgbox % time "`n" a_tickcount - a

112

Re: AHK: графика

Да, действительно немного быстрее. Но вряд ли есть какая-то выгода от этого, если нужно показать окно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

113 (изменено: serzh82saratov, 2019-03-01 20:19:50)

Re: AHK: графика

В 97 в Gdip_CreateHBITMAPFromBitmap передаётся ARGB. По сути если альфа ноль, то остальное не должно быть важно, но 0x00ffffff так же "забеливает" как и 0xffffffff, почему 0x00000000 не "чернит"?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

114 (изменено: stealzy, 2019-03-01 21:46:08)

Re: AHK: графика

Потому что 0x00000000 это полностью прозрачный черный?

https://docs.microsoft.com/en-us/windows/desktop/api/Gdiplusheaders/nf-gdiplusheaders-bitmap-gethbitmap пишет:

This parameter is ignored if the bitmap is totally opaque.

115

Re: AHK: графика

Очень жирный шрифт, ничего на русском, нет ссылок.
Выплюньте ... и расскажите на русском.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

116

Re: AHK: графика

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

117

Re: AHK: графика

Я не вдавался в подробности, но если посмотреть на функцию UpdateLayeredWindow:
https://docs.microsoft.com/en-us/window … eredwindow
то там описывается алгоритм наложения:
https://docs.microsoft.com/en-us/window … ndfunction
Как я понял работает по типу как screen в фотошопе.

118

Re: AHK: графика

Спасибо. Вообщем всё не просто.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

119

Re: AHK: графика

+ Offtop serzh82saratov:
serzh82saratov пишет:

Очень жирный шрифт, ничего на русском, нет ссылок.

Шрифт жирным делает элемент цитирования, документация msdn действительно нерусская, но ссылка на нее оставлена.

Если же у вас личные обиды за конкретную критику, то и выяснять надо было там или в личке.
Со своей стороны сплевывать просить не собираюсь, это на ваше усмотрение.

120 (изменено: Malcev, 2019-03-03 16:33:01)

Re: AHK: графика

Кстати, вызов alphablend тут демонстрируется:
https://www.autoitscript.com/forum/topi … om-autoit/
Для запуска надо установить старую версию автоит.
Сама библиотека GDI тут:
https://github.com/Kelturio/Misc/tree/m … GDI%20UDFs

121 (изменено: serzh82saratov, 2019-03-03 16:43:44)

Re: AHK: графика

Так а есть смысл, разве простое наложение рисунка с прозрачными областями не так же работает?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

122 (изменено: Malcev, 2019-03-03 16:58:38)

Re: AHK: графика

С alphablend можно накладывать через GDI.
По производительности не сравнивал.

123

Re: AHK: графика

Malcev пишет:

С alphablend можно накладывать через GDI.

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

124

Re: AHK: графика

GDI или GDI+?

125

Re: AHK: графика

GDI+ наверное, если DrawImage.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui