76 (изменено: Foma, 2017-04-29 21:04:54)

Re: AHK: графика

Не работало. Сейчас работает. Может перезагрузка помогла. Вопрос снимаю.

Добавлю другой. Я ищу самый простой вариант для рисования отдельных точек по известным координатам. Пока не смог приспособить ни синусоиду, ни что-то из набора https://autohotkey.com/board/topic/2944 … 145-by-tic.

77

Re: AHK: графика

Кто-то может подсказать, как выводить отдельные точки?

78

Re: AHK: графика

http://forum.script-coding.com/viewtopic.php?id=10974

79

Re: AHK: графика

Спасибо!

80

Re: AHK: графика

Как сохранить полупрозрачный Bitmap?
Нашёл для этого только DrawImage, но как потом сохранить результат в файл?
Если изменения происходят в Graphics, то логично из неё получить Bitmap.
GdipCreateBitmapFromGraphics? Но как ни странно её нет ни в библиотеке, ни на форумах.
У меня сохраняет белый цвет.


File = test.png

Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmap, W, H)   

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

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)

DllCall("gdiplus\GdipCreateBitmapFromGraphics", "int", W, "int", H, "UPtr", G, "UPtr*", pBitmap2)

Gdip_SaveBitmapToFile(pBitmap2, "FinalImage.png")

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

81

Re: AHK: графика

Или так, по идее должно копироваться во втором окне.


File = test.png

Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmap, W, H)   

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

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)

Gui, New
Gui, -Caption +AlwaysOnTop 
Gui, Margin, 0,0
Gui, Add, text, x0 y0 w%W% h%H% 0xE hwndhPic ; SS_BITMAP = 0xE
Gui, Show, Na

hBM := CreateCompatibleBitmap(hDC, W, H)
; hBM := Gdip_CreateHBITMAPFromBitmap(pBitmap)  ;	для проверки hPic
STM_SETIMAGE := 0x172, IMAGE_BITMAP := 0x0
SendMessage, STM_SETIMAGE, IMAGE_BITMAP, hBM, , ahk_id %hPic% 
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

82

Re: AHK: графика

Нужно Gdip_CreateBitmapFromHBITMAP(hBitmap), но вместо прозрачных пикселей будут чёрные. Чтобы сохранить прозрачные, нужно как-то вручную перебирать пиксели, смотреть, у каких есть прозрачность и создавать что-то типа маски. Я подробно не разбирался.

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

83

Re: AHK: графика

Не соображу в какое место Gdip_CreateBitmapFromHBITMAP.

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

84

Re: AHK: графика

А, ты про 80.
А 81?

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

85

Re: AHK: графика

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

Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmap, W, H)   

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

Matrix = 0.5
Gdip_DrawImage(G, pBitmap, 0, 0, W, H, 0, 0, W, H, Matrix)
Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow
Gui, Show, Na
UpdateLayeredWindow(hGui, hDC, 500, 0, W, H)

pBitmap2 := Gdip_CreateBitmapFromHBITMAP(hBitmap)

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

86

Re: AHK: графика

serzh82saratov пишет:

А, ты про 80.
А 81?

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

87

Re: AHK: графика

pBitmap2 := Gdip_CreateBitmapFromHBITMAP(hBitmap)
hBM2 := Gdip_CreateHBITMAPFromBitmap(pBitmap2)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

88 (изменено: teadrinker, 2019-02-27 00:16:28)

Re: AHK: графика

Чтобы сохранить прозрачность, гугли примеры с AlphaBlend().

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

89

Re: AHK: графика

Спасибо, ясно, вообщем дело тёмное.

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

90

Re: AHK: графика

teadrinker пишет:

Чтобы сохранить прозрачность, гугли примеры с AlphaBlend().

Зачем так сложно?
Можно же через GdipCreateBitmapFromScan0.

91

Re: AHK: графика

А, точно, забыл про это. Вот так вышло:

pBitmap2 := Gdip_CreateBitmap(W, H)
G2 := Gdip_GraphicsFromImage(pBitmap2)
Matrix = 0.5
Gdip_DrawImage(G2, pBitmap, 0, 0, W, H, 0, 0, W, H, Matrix)
Gdip_SaveBitmapToFile(pBitmap2, A_Desktop . "\FinalImage.png")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

92 (изменено: serzh82saratov, 2019-02-28 21:47:46)

Re: AHK: графика

А если в графике несколько слоёв?


File =  

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)

pBitmap2 := Gdip_CreateBitmap(W, H)
G2 := Gdip_GraphicsFromImage(pBitmap2)
Matrix = 0.5
Gdip_DrawImage(G2, pBitmap, 0, 0, W, H, 0, 0, W, H, Matrix)

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

Run  % A_Desktop . "\FinalImage.png"
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

93

Re: AHK: графика

Аналогично:


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

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) 

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

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

pBitmap2 := Gdip_CreateBitmap(W, H)
G2 := Gdip_GraphicsFromImage(pBitmap2)
Gdip_FillRoundedRectangle(G2, pBrush, 0, 0, W, H, 0) 
Gdip_DeleteBrush(pBrush)
Matrix = 0.5
Gdip_DrawImage(G2, pBitmap, 0, 0, W, H, 0, 0, W, H, Matrix)

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

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

94

Re: AHK: графика

Спасибо, для меня не до конца прозрачно что к чему в GDI.
Тут получается из чего создаём графику то и меняется. Если создали из Bitmap, то после операций с графикой меняется Bitmap. Я думал что изменения происходят только в графике.

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

95

Re: AHK: графика

То есть думал, что после всех преобразований для UpdateLayeredWindow, все эти изменения я могу получить из какого то объекта, а не производить те же манипуляции снова.

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

96

Re: AHK: графика

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

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

97 (изменено: serzh82saratov, 2019-03-01 03:03:30)

Re: AHK: графика

Так искажаются цвета. Но результат в файле.


File =  

Gdip_Startup()
pBitmapFile := Gdip_CreateBitmapFromFile(File)

Gdip_GetImageDimensions(pBitmapFile, W, H)   

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

pBrush := Gdip_BrushCreateSolid(0x8000FF00)
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"
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

98

Re: AHK: графика

Хотя нет, вроде туда копаю.

hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap, 0x00000000)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

99

Re: AHK: графика

Так хочешь?

........
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")

Чтобы не была перевернутая поставь отрицательную высоту в:

hBitmap := CreateDIBSection(W, -H)

100

Re: AHK: графика

Хороший пример, спасибо.
В 97 по проще?

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