-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy pathGdip.Tutorial.6-Image.Editing.ahk
82 lines (58 loc) · 3.07 KB
/
Gdip.Tutorial.6-Image.Editing.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
; gdi+ ahk tutorial 6 written by tic (Tariq Porter)
; Requires Gdip.ahk either in your Lib folder as standard library or using #Include
;
; Example to take files from disk, load them onto a background and save back to disk
#SingleInstance, Force
#NoEnv
SetBatchLines, -1
; Uncomment if Gdip.ahk is not in your standard library
;#Include, Gdip.ahk
; Specify both of the files we are going to use
File1 = mario.png
File2 = link.png
; Start gdi+
If !pToken := Gdip_Startup()
{
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
; If the images we want to work with do not exist on disk, then download them...
If !(FileExist(File1) && FileExist(File2))
{
UrlDownloadToFile, http://www.autohotkey.net/~tic/mario.png, mario.png
UrlDownloadToFile, http://www.autohotkey.net/~tic/link.png, link.png
}
; Create a 500x500 pixel gdi+ bitmap (this will be the entire drawing area we have to play with)
pBitmap := Gdip_CreateBitmap(600, 600)
; Get a pointer to the graphics of the bitmap, for use with drawing functions
G := Gdip_GraphicsFromImage(pBitmap)
; Create a green brush (this will be used to fill the background with green). The brush is fully opaque (ARGB)
pBrush := Gdip_BrushCreateSolid(0xff00ff00)
; Filll the entire graphics of the bitmap with the green brush (this will be out background colour)
Gdip_FillRectangle(G, pBrush, 0, 0, 600, 600)
; Delete the brush created to save memory as we don't need the same brush anymore
Gdip_DeleteBrush(pBrush)
; Get bitmaps for both the files we are going to be working with
pBitmapFile1 := Gdip_CreateBitmapFromFile(File1), pBitmapFile2 := Gdip_CreateBitmapFromFile(File2)
; Get the width and height of the 1st bitmap
Width := Gdip_GetImageWidth(pBitmapFile1), Height := Gdip_GetImageHeight(pBitmapFile1)
; Draw the 1st bitmap (1st image) onto our "canvas" (the graphics of the original bitmap we created) with the same height and same width
; at coordinates (25,30).....We will be ignoring the matrix parameter for now. This can be used to change opacity and colours when drawing
Gdip_DrawImage(G, pBitmapFile1, 25, 30, Width, Height, 0, 0, Width, Height)
; Do the same again for the 2nd file, but change the coordinates to (250,260).....
Width := Gdip_GetImageWidth(pBitmapFile2), Height := Gdip_GetImageHeight(pBitmapFile2)
Gdip_DrawImage(G, pBitmapFile2, 250, 260, Width, Height, 0, 0, Width, Height)
; Dispose of both of these bitmaps we created from the images on disk, as they are now been used...They are on
; the graphics of the bitmap of our created "canvas"
Gdip_DisposeImage(pBitmapFile1), Gdip_DisposeImage(pBitmapFile2)
; Save the bitmap to file "File.png" (extension can be .png,.bmp,.jpg,.tiff,.gif)
; Bear in mind transparencies may be lost with some image formats and will appear black
Gdip_SaveBitmapToFile(pBitmap, "FinalImage.png")
; The bitmap can be deleted
Gdip_DisposeImage(pBitmap)
; The graphics may now be deleted
Gdip_DeleteGraphics(G)
; ...and gdi+ may now be shutdown
Gdip_Shutdown(pToken)
ExitApp
Return