Page 1 of 2

Image2Include - #include images in your scripts

Posted: 13 Nov 2019, 09:42
by guest3456
see @just me 's original script here:

https://autohotkey.com/board/topic/93292-image2include-include-images-in-your-scripts/

this allows you to choose an image file, and the script will convert the image into an encoded base64 hex string.. then you can include the function in your script and decode the string back to an image that you can use in your GUIs or in GDI+.

i've backported it to make the generated output script compatible with AHK Basic

changes:
https://github.com/mmikeww/image2include/commit/2226937342a11e2b82d6a186d8f1a0019c55e0e2

code here:
https://github.com/mmikeww/image2include

Re: Image2Include - #include images in your scripts

Posted: 13 Nov 2019, 10:15
by swagfag
nice

Re: Image2Include - #include images in your scripts

Posted: 13 Nov 2019, 12:21
by guest3456
looks like swagfag already added this to the GDIP AHKv2 lib, based on the work here, so this is better for GDIP:

Code: Select all

GdipBitmapFromBase64(ByRef Base64)
{
   Ptr := A_PtrSize ? "Ptr" : "UInt"
   UPtr := A_PtrSize ? "UPtr" : "UInt"

   ; calculate the length of the buffer needed
   if !(DllCall("crypt32\CryptStringToBinary" (A_IsUnicode ? "W" : "A"), Ptr, &Base64, "UInt", 0, "UInt", 0x01, Ptr, 0, "UIntP", DecLen, Ptr, 0, Ptr, 0))
      return -1

   VarSetCapacity(Dec, DecLen, 0)

   ; decode the Base64 encoded string
   if !(DllCall("crypt32\CryptStringToBinary" (A_IsUnicode ? "W" : "A"), Ptr, &Base64, "UInt", 0, "UInt", 0x01, Ptr, &Dec, "UIntP", DecLen, Ptr, 0, Ptr, 0))
      return -2

   ; create a memory stream
   if !(pStream := DllCall("shlwapi\SHCreateMemStream", Ptr, &Dec, "UInt", DecLen, UPtr))
      return -3

   DllCall("gdiplus\GdipCreateBitmapFromStreamICM", Ptr, pStream, Ptr "P", pBitmap)

   PtrSize := A_PtrSize ? A_PtrSize : 4
   Release := NumGet( NumGet( pStream+0 ), 2*PtrSize)
   DllCall(Release, Ptr, pStream)

   return pBitmap
}
just use the image2include script to generate the base64 string and then the above code will work for all AHK versions to create the GDIP Bitmap

Re: Image2Include - #include images in your scripts

Posted: 13 Nov 2019, 13:54
by TheDewd
@guest3456,

I'm currently using the functions below...

These are what I settled on after making that post in "Ask for Help" that you linked to: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=49849

Code: Select all

; GDI+ Startup
hGdip := DllCall("Kernel32.dll\LoadLibrary", "Str", "Gdiplus.dll") ; Load module
VarSetCapacity(GdiplusStartupInput, (A_PtrSize = 8 ? 24 : 16), 0) ; GdiplusStartupInput structure
NumPut(1, GdiplusStartupInput, 0, "UInt") ; GdiplusVersion
DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &GdiplusStartupInput, "Ptr", 0) ; Initialize GDI+

Code: Select all

; Clean up resources used by GDI+
DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken)

Code: Select all

GdipCreateBitmapFromBase64(B64) {
	VarSetCapacity(B64Len, 0)
	DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", StrLen(B64), "UInt", 0x01, "Ptr", 0, "UIntP", B64Len, "Ptr", 0, "Ptr", 0)
	VarSetCapacity(B64Dec, B64Len, 0) ; pbBinary size
	DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", StrLen(B64), "UInt", 0x01, "Ptr", &B64Dec, "UIntP", B64Len, "Ptr", 0, "Ptr", 0)
	pStream := DllCall("Shlwapi.dll\SHCreateMemStream", "Ptr", &B64Dec, "UInt", B64Len, "UPtr")
	VarSetCapacity(pBitmap, 0)
	DllCall("Gdiplus.dll\GdipCreateBitmapFromStreamICM", "Ptr", pStream, "PtrP", pBitmap)
	ObjRelease(pStream)
	return pBitmap
}

Code: Select all

GdipCreateHBITMAPFromBitmap(pBitmap) {
	VarSetCapacity(hBitmap, 0)
	DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "UInt", pBitmap, "UInt*", hBitmap, "Int", 0XFFFFFFFF)
	return hBitmap
}

Code: Select all

GdipCreateHICONFromBitmap(pBitmap) {
	VarSetCapacity(hIcon, 0)
	DllCall("Gdiplus.dll\GdipCreateHICONFromBitmap", "Ptr", pBitmap, "PtrP", hIcon, "UInt", 0)
	return hIcon
}

Code: Select all

GdipCreateHBITMAPFromBase64(B64) {
	pBitmap := GdipCreateBitmapFromBase64(B64)
	return GdipCreateHBITMAPFromBitmap(pBitmap)
}

To use the image for a picture control, I use something like this:

Gui, Add, Picture, x0 y0 w16 h16 +BackgroundTrans, % "HBITMAP:*" GdipCreateHBITMAPFromBase64(VarOfBase64String)

I wanted to post these to show anyone interested how to use the image with a picture control.

Re: Image2Include - #include images in your scripts

Posted: 13 Nov 2019, 14:21
by guest3456
TheDewd wrote:
13 Nov 2019, 13:54
@guest3456,

I'm currently using the functions below...
yes, thanks, but my purpose of this was to make the func backward compatible with AHK Basic 1.0 which I originally did in the OP for the original script, and then modified the func swagfrag created based on your thread

Re: Image2Include - #include images in your scripts

Posted: 13 Nov 2019, 21:50
by Hellbent
Awesome stuff.
I had come to the assumption that this type of image converting was only suitable for small images almost a year ago.

In the long run I'm glad that I had that false assumption because it was one of the driving forces that made me create my bitmap maker which is better suited for creating images that can be altered and scaled, but it's nice to know that this can be done with larger images.

Will definitely come in handy.

Thanks.

Re: Image2Include - #include images in your scripts

Posted: 15 Nov 2019, 00:33
by dammtools
guest3456 wrote:
13 Nov 2019, 09:42
see @just me 's original script here:

https://autohotkey.com/board/topic/93292-image2include-include-images-in-your-scripts/

this allows you to choose an image file, and the script will convert the image into an encoded base64 hex string.. then you can include the function in your script and decode the string back to an image that you can use in your GUIs or in GDI+.

i've backported it to make the generated output script compatible with AHK Basic

changes:
https://github.com/mmikeww/image2include/commit/2226937342a11e2b82d6a186d8f1a0019c55e0e2

code here:
https://github.com/mmikeww/image2include
First of all, nice work so far.
Been trying to use your script, but I have no clue how to add more images in a GUI using this. Can you tell me how?

Re: Image2Include - #include images in your scripts

Posted: 15 Nov 2019, 08:41
by TheDewd
dammtools wrote:
15 Nov 2019, 00:33
First of all, nice work so far.
Been trying to use your script, but I have no clue how to add more images in a GUI using this. Can you tell me how?

This is using my older functions, because I already had the code ready to post.

Code: Select all

#SingleInstance, Force

B64Logo := "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"

B64LogoGoogle := "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"

; GDI+ Startup
hGdip := DllCall("Kernel32.dll\LoadLibrary", "Str", "Gdiplus.dll") ; Load module
VarSetCapacity(GdiplusStartupInput, (A_PtrSize = 8 ? 24 : 16), 0) ; GdiplusStartupInput structure
NumPut(1, GdiplusStartupInput, 0, "UInt") ; GdiplusVersion
VarSetCapacity(pToken, 0)
DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &GdiplusStartupInput, "Ptr", 0) ; Initialize GDI+

BMPLogo := GdipCreateFromBase64(B64Logo, 2)
BMPLogoGoogle := GdipCreateFromBase64(B64LogoGoogle, 2)

; Free GDI+ module from memory
DllCall("Kernel32.dll\FreeLibrary", "Ptr", hGdip)

Gui, +LastFound -Resize
Gui, Margin, 0, 0
;Gui, Color, FF00FF
Gui, Add, Picture, x0 y0 w517 h78 +BackgroundTrans, % "HBITMAP:*" BMPLogo
Gui, Add, Picture, x20 y20 w272 h92 +BackgroundTrans, % "HBITMAP:*" BMPLogoGoogle

Gui, Show, AutoSize, Example
return

GdipCreateFromBase64(B64, RetType := 0) { ; 0=pBitmap, 1=HICON, 2=HBITMAP
	VarSetCapacity(B64Len, 0)
	DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", StrLen(B64), "UInt", 0x01, "Ptr", 0, "UIntP", B64Len, "Ptr", 0, "Ptr", 0)
	VarSetCapacity(B64Dec, B64Len, 0) ; pbBinary size
	DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", StrLen(B64), "UInt", 0x01, "Ptr", &B64Dec, "UIntP", B64Len, "Ptr", 0, "Ptr", 0)
	pStream := DllCall("Shlwapi.dll\SHCreateMemStream", "Ptr", &B64Dec, "UInt", B64Len, "UPtr")
	VarSetCapacity(pBitmap, 0)
	DllCall("Gdiplus.dll\GdipCreateBitmapFromStreamICM", "Ptr", pStream, "PtrP", pBitmap)

	If (RetType = 2) {
		VarSetCapacity(hBitmap, 0)
		DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "UInt", pBitmap, "UInt*", hBitmap, "Int", 0XFFFFFFFF)
	}

	If (RetType = 1) {
		DllCall("Gdiplus.dll\GdipCreateHICONFromBitmap", "Ptr", pBitmap, "PtrP", hIcon, "UInt", 0)
	}

	ObjRelease(pStream)

	return (RetType = 1 ? hIcon : RetType = 2 ? hBitmap : pBitmap)
}

Also, FYI -- https://www.autohotkey.com/boards/viewtopic.php?p=301384#p301384

Re: Image2Include - #include images in your scripts

Posted: 15 Nov 2019, 10:21
by guest3456
dammtools wrote:
15 Nov 2019, 00:33
First of all, nice work so far.
Been trying to use your script, but I have no clue how to add more images in a GUI using this. Can you tell me how?
Um, just run the Image2Include.ahk script, pick an image, and the code will be generated.
Then just put the appropriate code in the Sample.ahk script

Re: Image2Include - #include images in your scripts

Posted: 16 Nov 2019, 18:56
by dammtools
Thanks guys. What an awesome work you guys are doing here. Keep it up!

Re: Image2Include - #include images in your scripts

Posted: 20 Nov 2019, 08:35
by haichen
I tried to insert an image for a cursor. Unfortunately without success. Can you give me an example?

Code: Select all

;Example Code I used
x::SetSystemCursor(hwndBITMAP) 
x Up::RestoreCursors()
Return
SetSystemCursor(CursorHandle)
{
	IDC_SIZEALL := 32513
	;CursorHandle := DllCall( "LoadCursor", Uint,0, Int,IDC_SIZEALL )
	Cursors = 32512,32513,32514,32515,32516,32640,32641,32642,32643,32644,32645,32646,32648,32649,32650,32651
	Loop, Parse, Cursors, `,
	{
		DllCall( "SetSystemCursor", Uint,CursorHandle, Int,A_Loopfield )
	}
}

RestoreCursors() 
{
	SPI_SETCURSORS := 0x57
	DllCall( "SystemParametersInfo", UInt,SPI_SETCURSORS, UInt,0, UInt,0, UInt,0 )
}

Re: Image2Include - #include images in your scripts

Posted: 07 Jun 2020, 18:48
by nscience
Does it actually support Transparency?
From my testing with ImageSearch, it doesnt seem to be the case compared with the same search image as File.
Since i saw this: https://www.autohotkey.com/boards/viewtopic.php?t=63345 , im wondering if any of the used gdi+ functions may ignore Transparency and if, if it could be fixed?

Re: Image2Include - #include images in your scripts

Posted: 08 Jun 2020, 04:21
by iseahound
I added Gdip_CreateARGBHBitmapfromBitmap and Gdip_CreateARGBBitmapfromHBitmap to the latest version of Gdip_All

Re: Image2Include - #include images in your scripts

Posted: 08 Jun 2020, 08:17
by guest3456
yes iseahound added those funcs here:
https://github.com/mmikeww/AHKv2-Gdip

Re: Image2Include - #include images in your scripts

Posted: 08 Jun 2020, 08:37
by robodesign
Those functions are available in the extended compilation library edition as well. And, in addition, you can convert to/from base64 with this edition.

Best regards, Marius.

Re: Image2Include - #include images in your scripts

Posted: 08 Jun 2020, 18:38
by nscience
Thank you for the answers guys! Now i just need to get used to the ahk gdip lib. Since im quite new to ahk, this is a steep step :)
So, as far as i understood, the available image2include.ahk script in its current form isnt updated yet to handle transparency, right?

Re: Image2Include - #include images in your scripts

Posted: 20 Jun 2020, 19:25
by nscience
@TheDewd or others:
when i run your script from above (https://www.autohotkey.com/boards/viewtopic.php?p=301385#p301385) it works fine when i run it uncompiled.
But if ran compiled, i get this instead:

https i.postimg.cc /L5xntwqH/image.png Broken Link for safety

any ideas whats wrong there?

solved: it used outdated/ansi.bin, needed the unicode one.

Re: Image2Include - #include images in your scripts

Posted: 03 Sep 2023, 07:57
by Huh-Say What
Hello All,
I am desperately trying to figure out how to use this image2include, but am completely stumped. Is there an online tutorial or anything for this? I assume it's something along the lines of...

Code: Select all

B64-Image := "abc.xyz"
Some Gui coding stuff here
The Image2Include Function
image.png
image.png (19.33 KiB) Viewed 4469 times

For example, I use the utility to convert to base64 as shown in the image above and I get...

Code: Select all

; ##################################################################################
; # This #Include file was generated by Image2Include.ahk, you must not change it! #
; ##################################################################################
Create_Smiley_png(NewHandle = False) {
Static hBitmap := Create_Smiley_png()
Ptr := A_PtrSize ? "Ptr" : "UInt"
UPtr := A_PtrSize ? "UPtr" : "UInt"
If (NewHandle)
   hBitmap := 0
If (hBitmap)
   Return hBitmap
VarSetCapacity(B64, 175052 << !!A_IsUnicode)
B64 := "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACX.....and on and on.

But then what, where, and how do I use that information? For this testing I am just using a small smiley image...
image.png
image.png (13.39 KiB) Viewed 4469 times
Thank you for any assistance here in advance!!

Re: Image2Include - #include images in your scripts

Posted: 03 Sep 2023, 11:20
by lmstearn
Huh-Say What wrote:
03 Sep 2023, 07:57
Hello All,
I am desperately trying to figure out how to use this image2include, but am completely stumped. Is there an online tutorial or anything for this? I assume it's something along the lines of...
To show the image, copy the Sample.ahk mentioned above (or following) into the TEMP directory, and run it:

Code: Select all

#NoEnv
DetectHiddenWindows  On
SetWorkingDir %A_ScriptDir%
#Include %A_ScriptDir%\Create_image_png.ahk ; change the name to what you need
SetBatchLines, -1
T := A_TickCount
HBITMAP := Create_image_png() ; change the name to what you need
H := Bitmap_GetHeight(HBITMAP)
W := Bitmap_GetWidth(HBITMAP)
; msgbox %W%x%H%
; ----------------------------------------------------------------------------------------------------------------------
Gui, Margin, 0, 0
Gui, Add, Text, x0 y0 w%W% h%H% hwndHPic1
Bitmap_SetImage(HPic1, HBITMAP)
T := A_TickCount - T
Gui, Show, , Included Image - %T% ms
Return
; ----------------------------------------------------------------------------------------------------------------------
GuiClose:
GuiEscape:
ExitApp
; ----------------------------------------------------------------------------------------------------------------------
; Returns the width of a bitmap.
; ----------------------------------------------------------------------------------------------------------------------
Bitmap_GetWidth(hBitmap) {
   Ptr := A_PtrSize ? "Ptr" : "UInt"
   PtrSize := A_PtrSize ? A_PtrSize : 4
   Size := (4 * 5) + PtrSize + (PtrSize - 4)
   VarSetCapacity(BITMAP, Size, 0)
   DllCall("Gdi32.dll\GetObject", Ptr, hBitmap, "Int", Size, Ptr, &BITMAP, "Int")
   Return NumGet(BITMAP, 4, "Int")
}
; ----------------------------------------------------------------------------------------------------------------------
; Returns the height of a bitmap.
; ----------------------------------------------------------------------------------------------------------------------
Bitmap_GetHeight(hBitmap) {
   Ptr := A_PtrSize ? "Ptr" : "UInt"
   PtrSize := A_PtrSize ? A_PtrSize : 4
   Size := (4 * 5) + PtrSize + (PtrSize - 4)
   VarSetCapacity(BITMAP, Size, 0)
   DllCall("Gdi32.dll\GetObject", Ptr, hBitmap, "Int", Size, Ptr, &BITMAP, "Int")
   Return NumGet(BITMAP, 8, "Int")
}
; ----------------------------------------------------------------------------------------------------------------------
; Associates a new bitmap with a static control.
; Parameters:     hCtrl    -  Handle to the GUI control (Pic or Text).
;                 hBitmap  -  Handle to the bitmap to associate with the GUI control.
; Return value:   Handle to the image previously associated with the GUI control, if any; otherwise, NULL.
; ----------------------------------------------------------------------------------------------------------------------
Bitmap_SetImage(hCtrl, hBitmap) {
   ; STM_SETIMAGE = 0x172, IMAGE_BITMAP = 0x00, SS_BITMAP = 0x0E
   WinSet, Style, +0x0E, ahk_id %hCtrl%
   SendMessage, 0x172, 0x00, %hBitmap%, , ahk_id %hCtrl%
   Return ErrorLevel
}
:)

Re: Image2Include - #include images in your scripts

Posted: 05 Sep 2023, 05:48
by Huh-Say What
Thank you for you assistance @lmstearn. Unfortunately when I try this I get poor results. Is there more to it than just "change the name to what you need"?
I swapped out the #Include %A_ScriptDir%\Create_image_png.ahk and replaced with #Include %A_ScriptDir%\Create_Smiley_png.ahk.
And swapped HBITMAP := Create_image_png() into HBITMAP := Create_Smiley_png(). The below image is sadly the only result I get...

Image3.png
Image3.png (4.32 KiB) Viewed 4321 times