1 | #AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 |
---|
2 | #include <GDIPlus.au3> |
---|
3 | |
---|
4 | Opt('MustDeclareVars', 1) |
---|
5 | |
---|
6 | _MakeMyMultiPageTif(@MyDocumentsDir & "\GDIPlus_MultiPage.tif") |
---|
7 | |
---|
8 | Func _MakeMyMultiPageTif($sOutFile) |
---|
9 | Local $sPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Examples\GUI\Advanced\Images" |
---|
10 | Local $sCLSID, $tData, $tParams, $hImage1, $hImage2, $hImage3 |
---|
11 | |
---|
12 | _GDIPlus_Startup() |
---|
13 | |
---|
14 | $sCLSID = _GDIPlus_EncodersGetCLSID ("TIF") |
---|
15 | |
---|
16 | ; Create the Const Encoder Value Type struct |
---|
17 | $tData = DllStructCreate("int Data") |
---|
18 | |
---|
19 | ; Put the Const Encoder Value Type into the struct |
---|
20 | DllStructSetData($tData, "Data", $GDIP_EVTMULTIFRAME) |
---|
21 | |
---|
22 | ;Initiate the Encoder Parameters |
---|
23 | $tParams = _GDIPlus_ParamInit (1) |
---|
24 | _GDIPlus_ParamAdd ($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data")) |
---|
25 | |
---|
26 | ; Load 3 images that will be put into the tif file, the images can be different formats and sizes. |
---|
27 | $hImage1 = _GDIPlus_ImageLoadFromFile($sPath & "\Red.bmp") |
---|
28 | $hImage2 = _GDIPlus_ImageLoadFromFile($sPath & "\Green.bmp") |
---|
29 | $hImage3 = _GDIPlus_ImageLoadFromFile($sPath & "\Blue.bmp") |
---|
30 | |
---|
31 | ; Save the first loaded image passing on the Encoder Parameters |
---|
32 | _GDIPlus_ImageSaveToFileEx($hImage1, $sOutFile, $sCLSID, DllStructGetPtr($tParams)) |
---|
33 | |
---|
34 | ; Now we have saved the first image into the tif we can set the Encoder Value Type again to add the next frames |
---|
35 | DllStructSetData($tData, "Data", $GDIP_EVTFRAMEDIMENSIONPAGE) |
---|
36 | $tParams = _GDIPlus_ParamInit (1) |
---|
37 | _GDIPlus_ParamAdd ($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data")) |
---|
38 | |
---|
39 | ; Now we add the 2nd frame |
---|
40 | _GDIPlus_ImageSaveAddImage($hImage1, $hImage2, DllStructGetPtr($tParams)) |
---|
41 | |
---|
42 | ; Now we add the 3rd frame |
---|
43 | _GDIPlus_ImageSaveAddImage($hImage1, $hImage3, DllStructGetPtr($tParams)) |
---|
44 | |
---|
45 | ; My images are now added to the tif file I want to set the Encoder Value Type again to flush and finalise |
---|
46 | DllStructSetData($tData, "Data", $GDIP_EVTFLUSH) |
---|
47 | $tParams = _GDIPlus_ParamInit (1) |
---|
48 | _GDIPlus_ParamAdd ($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data")) |
---|
49 | |
---|
50 | ; Now the final step to flush the encoder and finalize the image |
---|
51 | _GDIPlus_ImageSaveAdd($hImage1, DllStructGetPtr($tParams)) |
---|
52 | |
---|
53 | ; Tidy up the 3 images we loaded and shutdown. |
---|
54 | _GDIPlus_ImageDispose($hImage1) |
---|
55 | _GDIPlus_ImageDispose($hImage2) |
---|
56 | _GDIPlus_ImageDispose($hImage3) |
---|
57 | _GDIPlus_Shutdown() |
---|
58 | EndFunc |
---|
59 | |
---|
60 | ; #FUNCTION# ==================================================================================================================== |
---|
61 | ; Name...........: _GDIPlus_ImageSaveAddImage |
---|
62 | ; Description ...: Adds a frame to a file or stream specified in a previous call to the _GDIPlus_ImageSaveToFileEx. |
---|
63 | ; Syntax.........: _GDIPlus_ImageSaveAddImage($hImage, $hImageNew, $pParams) |
---|
64 | ; Parameters ....: $hImage - Handle to an image object |
---|
65 | ; $hImageNew - Handle to the new image object to add |
---|
66 | ; $pParams - Pointer to a $tagGDIPPENCODERPARAMS structure |
---|
67 | ; Return values .: Success - True |
---|
68 | ; Failure - False |
---|
69 | ; Author ........: Smashly |
---|
70 | ; Modified.......: |
---|
71 | ; Remarks .......: |
---|
72 | ; Related .......: _GDIPlus_ImageLoadFromFile, _GDIPlus_ImageSaveToFileEx, _GDIPlus_ImageSaveAdd, $tagGDIPPENCODERPARAMS |
---|
73 | ; Link ..........; @@MsdnLink@@ GdipSaveAddImage |
---|
74 | ; Example .......; Yes |
---|
75 | ; =============================================================================================================================== |
---|
76 | Func _GDIPlus_ImageSaveAddImage($hImage, $hImageNew, $pParams) |
---|
77 | Local $aResult |
---|
78 | |
---|
79 | $aResult = DllCall($ghGDIPDll, "int", "GdipSaveAddImage", "hwnd", $hImage, "hwnd", $hImageNew, "ptr", $pParams) |
---|
80 | If @error Then Return SetError(@error, @extended, False) |
---|
81 | Return SetError($aResult[0], 0, $aResult[0] = 0) |
---|
82 | EndFunc |
---|
83 | |
---|
84 | ; #FUNCTION# ==================================================================================================================== |
---|
85 | ; Name...........: _GDIPlus_ImageSaveAdd |
---|
86 | ; Description ...: Save selected frames from a multiple-frame image to another multiple-frame image. |
---|
87 | ; Syntax.........: _GDIPlus_ImageSaveAdd($hImage, $pParams) |
---|
88 | ; Parameters ....: $hImage - Handle to an image object |
---|
89 | ; $pParams - Pointer to a $tagGDIPPENCODERPARAMS structure |
---|
90 | ; Return values .: Success - True |
---|
91 | ; Failure - False |
---|
92 | ; Author ........: Smashly |
---|
93 | ; Modified.......: |
---|
94 | ; Remarks .......: |
---|
95 | ; Related .......: _GDIPlus_ImageLoadFromFile, _GDIPlus_ImageSaveToFileEx, _GDIPlus_ImageSaveAddImage, $tagGDIPPENCODERPARAMS |
---|
96 | ; Link ..........; @@MsdnLink@@ GdipSaveAdd |
---|
97 | ; Example .......; Yes |
---|
98 | ; =============================================================================================================================== |
---|
99 | Func _GDIPlus_ImageSaveAdd($hImage, $pParams) |
---|
100 | Local $aResult |
---|
101 | |
---|
102 | $aResult = DllCall($ghGDIPDll, "int", "GdipSaveAdd", "hwnd", $hImage, "ptr", $pParams) |
---|
103 | If @error Then Return SetError(@error, @extended, False) |
---|
104 | Return SetError($aResult[0], 0, $aResult[0] = 0) |
---|
105 | EndFunc |
---|