Image2Include - #include images in your scripts

Post your working scripts, libraries and tools for AHK v1.1 and older
guest3456
Posts: 3463
Joined: 09 Oct 2013, 10:31

Image2Include - #include images in your scripts

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

guest3456
Posts: 3463
Joined: 09 Oct 2013, 10:31

Re: Image2Include - #include images in your scripts

13 Nov 2019, 12:21

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

User avatar
TheDewd
Posts: 1510
Joined: 19 Dec 2013, 11:16
Location: USA

Re: Image2Include - #include images in your scripts

13 Nov 2019, 13:54

@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.
guest3456
Posts: 3463
Joined: 09 Oct 2013, 10:31

Re: Image2Include - #include images in your scripts

13 Nov 2019, 14:21

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

User avatar
Hellbent
Posts: 2109
Joined: 23 Sep 2017, 13:34

Re: Image2Include - #include images in your scripts

13 Nov 2019, 21:50

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.
dammtools
Posts: 12
Joined: 11 Oct 2015, 18:02

Re: Image2Include - #include images in your scripts

15 Nov 2019, 00:33

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?
User avatar
TheDewd
Posts: 1510
Joined: 19 Dec 2013, 11:16
Location: USA

Re: Image2Include - #include images in your scripts

15 Nov 2019, 08:41

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
guest3456
Posts: 3463
Joined: 09 Oct 2013, 10:31

Re: Image2Include - #include images in your scripts

15 Nov 2019, 10:21

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

dammtools
Posts: 12
Joined: 11 Oct 2015, 18:02

Re: Image2Include - #include images in your scripts

16 Nov 2019, 18:56

Thanks guys. What an awesome work you guys are doing here. Keep it up!
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Image2Include - #include images in your scripts

20 Nov 2019, 08:35

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 )
}
nscience
Posts: 7
Joined: 07 Jun 2020, 18:29

Re: Image2Include - #include images in your scripts

07 Jun 2020, 18:48

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?
iseahound
Posts: 1444
Joined: 13 Aug 2016, 21:04
Contact:

Re: Image2Include - #include images in your scripts

08 Jun 2020, 04:21

I added Gdip_CreateARGBHBitmapfromBitmap and Gdip_CreateARGBBitmapfromHBitmap to the latest version of Gdip_All
robodesign
Posts: 934
Joined: 30 Sep 2017, 03:59
Location: Romania
Contact:

Re: Image2Include - #include images in your scripts

08 Jun 2020, 08:37

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.
-------------------------
KeyPress OSD v4: GitHub or forum. (presentation video)
Quick Picto Viewer: GitHub or forum.
AHK GDI+ expanded / compilation library (on GitHub)
My home page.
nscience
Posts: 7
Joined: 07 Jun 2020, 18:29

Re: Image2Include - #include images in your scripts

08 Jun 2020, 18:38

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?
nscience
Posts: 7
Joined: 07 Jun 2020, 18:29

Re: Image2Include - #include images in your scripts

20 Jun 2020, 19:25

@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.
User avatar
Huh-Say What
Posts: 25
Joined: 24 Apr 2023, 20:44

Re: Image2Include - #include images in your scripts

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

Code: Select all

B64-Image := "abc.xyz"
Some Gui coding stuff here
The Image2Include Function
image.png
image.png (19.33 KiB) Viewed 4270 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 4270 times
Thank you for any assistance here in advance!!
User avatar
lmstearn
Posts: 694
Joined: 11 Aug 2016, 02:32
Contact:

Re: Image2Include - #include images in your scripts

03 Sep 2023, 11:20

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
}
:)
:arrow: itros "ylbbub eht tuO kaerB" a ni kcuts m'I pleH
User avatar
Huh-Say What
Posts: 25
Joined: 24 Apr 2023, 20:44

Re: Image2Include - #include images in your scripts

05 Sep 2023, 05:48

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 4122 times

Return to “Scripts and Functions (v1)”

Who is online

Users browsing this forum: doodles333 and 230 guests