Ticket #3647: Test Resize.au3

File Test Resize.au3, 5.5 KB (added by mdepot@…, 6 years ago)

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