Ticket #3647: Test Resize.au3

File Test Resize.au3, 5.5 KB (added by mdepot@…, on Aug 6, 2018 at 4:43:24 PM)

Submited code fix for this issue and also ticket #3650

Line 
1#include <GDIPlus.au3>
2
3_GDIPlus_Startup()
4
5Local $sSourceImageFileName = @ScriptDir & "\TestImage.png"
6Local $sTestOldScaleFileName = @ScriptDir & "\TestOldScale.png"
7Local $sTestNewScaleFileName = @ScriptDir & "\TestNewScale.png"
8Local $sTestOldResizeFileName = @ScriptDir & "\TestOldResize.png"
9Local $sTestNewResizeFileName = @ScriptDir & "\TestNewResize.png"
10
11Local $hImage = _GDIPlus_ImageLoadFromFile($sSourceImageFileName)
12Local $iSourceWidth = _GDIPlus_ImageGetWidth($hImage)
13Local $iSourceHeight = _GDIPlus_ImageGetHeight($hImage)
14
15Local $hBitmapOldScale = _GDIPlus_ImageScale($hImage, 4, 4, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
16_GDIPlus_ImageSaveToFile($hBitmapOldScale, $sTestOldScaleFileName) ; also frees bitmap by default
17
18Local $hBitmapNewScale = My_GDIPlus_ImageScale($hImage, 4, 4, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
19_GDIPlus_ImageSaveToFile($hBitmapNewScale, $sTestNewScaleFileName) ; also frees bitmap by default
20
21Local $hBitmapOldResize = _GDIPlus_ImageResize($hImage, $iSourceWidth * 4, $iSourceHeight * 4, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
22_GDIPlus_ImageSaveToFile($hBitmapOldResize, $sTestOldResizeFileName) ; also frees bitmap by default
23
24Local $hBitmapNewResize = My_GDIPlus_ImageResize($hImage, $iSourceWidth * 4, $iSourceHeight * 4, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
25_GDIPlus_ImageSaveToFile($hBitmapNewResize, $sTestNewResizeFileName) ; also frees bitmap by default
26
27_GDIPlus_ImageDispose($hImage)
28_GDIPlus_Shutdown()
29
30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31; Test these functions as potential replacements for those GDIPlus.au3
32
33Func My_GDIPlus_ImageResize($hImage, $iNewWidth, $iNewHeight, $iInterpolationMode = $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
34 Local $iOldWidth = _GDIPlus_ImageGetWidth($hImage)
35 If @error Then Return SetError(1, 0, 0)
36 Local $iOldHeight = _GDIPlus_ImageGetHeight($hImage)
37 If @error Then Return SetError(2, 0, 0)
38 Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iNewWidth, $iNewHeight)
39 If @error Then Return SetError(3, 0, 0)
40 Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
41 If @error Then
42 _GDIPlus_BitmapDispose($hBitmap)
43 Return SetError(4, 0, 0)
44 EndIf
45 Local $hAttributes = _GDIPlus_ImageAttributesCreate()
46 If @error Then
47 _GDIPlus_BitmapDispose($hBitmap)
48 Return SetError(5, 0, 0)
49 EndIf
50 My_GDIPlus_ImageAttributesSetWrapMode($hAttributes, 3)
51 If @error Then
52 _GDIPlus_ImageAttributesDispose($hAttributes)
53 _GDIPlus_GraphicsDispose($hGraphics)
54 _GDIPlus_BitmapDispose($hBitmap)
55 Return SetError(6, 0, 0)
56 EndIf
57 _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
58 If @error Then
59 _GDIPlus_ImageAttributesDispose($hAttributes)
60 _GDIPlus_GraphicsDispose($hGraphics)
61 _GDIPlus_BitmapDispose($hBitmap)
62 Return SetError(7, 0, 0)
63 EndIf
64 _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iOldWidth, $iOldHeight, 0, 0, $iNewWidth, $iNewHeight, $hAttributes)
65 If @error Then
66 _GDIPlus_ImageAttributesDispose($hAttributes)
67 _GDIPlus_GraphicsDispose($hGraphics)
68 _GDIPlus_BitmapDispose($hBitmap)
69 Return SetError(8, 0, 0)
70 EndIf
71 _GDIPlus_ImageAttributesDispose($hAttributes)
72 _GDIPlus_GraphicsDispose($hGraphics)
73 Return $hBitmap
74EndFunc ;==>My_GDIPlus_ImageResize
75
76Func My_GDIPlus_ImageScale($hImage, $iScaleW, $iScaleH, $iInterpolationMode = $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
77 Local $iOldWidth = _GDIPlus_ImageGetWidth($hImage)
78 Local $iNewWidth = $iOldWidth * $iScaleW
79 If @error Then Return SetError(1, 0, 0)
80 Local $iOldHeight = _GDIPlus_ImageGetHeight($hImage)
81 Local $iNewHeight = $iOldHeight * $iScaleH
82 If @error Then Return SetError(2, 0, 0)
83 Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iNewWidth, $iNewHeight)
84 If @error Then Return SetError(3, 0, 0)
85 Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
86 If @error Then
87 _GDIPlus_BitmapDispose($hBitmap)
88 Return SetError(4, 0, 0)
89 EndIf
90 Local $hAttributes = _GDIPlus_ImageAttributesCreate()
91 If @error Then
92 _GDIPlus_BitmapDispose($hBitmap)
93 Return SetError(5, 0, 0)
94 EndIf
95 My_GDIPlus_ImageAttributesSetWrapMode($hAttributes, 3)
96 If @error Then
97 _GDIPlus_ImageAttributesDispose($hAttributes)
98 _GDIPlus_GraphicsDispose($hGraphics)
99 _GDIPlus_BitmapDispose($hBitmap)
100 Return SetError(6, 0, 0)
101 EndIf
102 _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
103 If @error Then
104 _GDIPlus_ImageAttributesDispose($hAttributes)
105 _GDIPlus_GraphicsDispose($hGraphics)
106 _GDIPlus_BitmapDispose($hBitmap)
107 Return SetError(7, 0, 0)
108 EndIf
109 _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iOldWidth, $iOldHeight, 0, 0, $iNewWidth, $iNewHeight, $hAttributes)
110 If @error Then
111 _GDIPlus_ImageAttributesDispose($hAttributes)
112 _GDIPlus_GraphicsDispose($hGraphics)
113 _GDIPlus_BitmapDispose($hBitmap)
114 Return SetError(8, 0, 0)
115 EndIf
116 _GDIPlus_ImageAttributesDispose($hAttributes)
117 _GDIPlus_GraphicsDispose($hGraphics)
118 Return $hBitmap
119EndFunc ;==>My_GDIPlus_ImageScale
120
121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
122; New function for DLL call to SetWrapMode on an ImageAttribute
123
124Func My_GDIPlus_ImageAttributesSetWrapMode($hImageAttributes, $iWrapModeType = 0, $iArgb = 0, $bClamp = 0)
125 Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipSetImageAttributesWrapMode", "handle", $hImageAttributes, "int", $iWrapModeType, "uint", $iArgb, "bool", $bClamp)
126 If @error Then Return SetError(@error, @extended, False)
127 If $aResult[0] Then Return SetError(10, $aResult[0], False)
128
129 Return True
130EndFunc ;==>My_GDIPlus_ImageAttributesSetWrapMode
131