Jump to content
Sign in to follow this  
MattTheHuman

GDIPlus Help.

Recommended Posts

MattTheHuman

I have a program that randomizes items for a game, and what I would like is to take the pictures and create one picture from around 7 images. Is there a way of doing this?

This is my program:

Posted Image

And what I would like to end up with is something like this:

Posted Image

After the advice from Melba23 I had a look at this topic, Grouping multiple images into one control., but I couldn't make heads or tails of the code. I've messed with some things but nothing has given me the result I wanted. I also would like to save this image to the same dir as the exe overwriting the old image.

-MattTheHuman

Share this post


Link to post
Share on other sites
PhoenixXL

of course there is a way, :)

just want to, if know are you interacting with the game for this,

If yes I fear you won't receive any help according to the Rules (bottom right corner)

Edited by PhoenixXL

My code:

PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.

Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners.

MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. 

Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.

Share this post


Link to post
Share on other sites
Melba23

PhoenixXL,

The OP mentioned that a Mod has already offered advice in this endeavour - I would have thought that was sufficient evidence that the thread is acceptable. But just to be clear - I am content for members to assist the OP - as far as I can see from the evidence of the earlier thread this script does not interact with a game. :)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
UEZ

MattTheHuman,

try this:

#include <GDIPlus.au3>
_GDIPlus_Startup()
Global $sPrefix = @ScriptDir & "\"
Global $aImages[9] = [$sPrefix & "1.png", "", "", $sPrefix & "2.png", $sPrefix & "3.png", $sPrefix & "4.png", $sPrefix & "5.png", $sPrefix & "6.png", $sPrefix & "7.png"]

$iResult = _GDIPlus_AssembleImages($aImages, @ScriptDir & "\Assembled.jpg")
If Not @error Then ShellExecute(@ScriptDir & "\Assembled.jpg")

_GDIPlus_Shutdown()
Exit

Func _GDIPlus_AssembleImages($aFiles, $sFile, $iColumn = 3, $iRow = 3, $iW = 72, $iH = 72, $iInterpolation = 7) ;coded by UEZ 2013
    If Not IsArray($aFiles) Then Return SetError(1, 0, 0)
    If $sFile = "" Then Return SetError(2, 0, 0)
    If UBound($aFiles) <> ($iColumn * $iRow) Then Return SetError(3, 0, 0) ;amount of images must be the same as column * row
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW * $iColumn, $iH * $iRow) ;create a new empty bitmap
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;get handle to the empty bitmap
    _GDIPlus_GraphicsSetInterpolationMode($hContext, $iInterpolation) ;set interpolation mode to get better quality on resized images
    Local $x, $y, $i = 0, $hBmp
    For $y = 0 To $iRow - 1 ;fill images to the empty bitmap
        For $x = 0 To $iColumn - 1
            If $aFiles[$i] <> "" Then
                $hBmp = _GDIPlus_BitmapCreateFromFile($aFiles[$i]) ;load image
                If $hBmp Then _GDIPlus_GraphicsDrawImageRect($hContext, $hBmp, $x * $iW, $y * $iH, $iW, $iH) ;copy image to the appropriate position
                _GDIPlus_BitmapDispose($hBmp) ;dispose temp image otherwise memory leak
            EndIf
            $i += 1
        Next
    Next
    _GDIPlus_GraphicsDispose($hContext) ;dispose graphic context
    _GDIPlus_ImageSaveToFile($hBitmap, $sFile) ;save new created image
    If @error Then
        _GDIPlus_BitmapDispose($hBitmap)
        Return SetError(4, 0, 0)
    EndIf
    _GDIPlus_BitmapDispose($hBitmap)
    Return 1
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_BitmapCreateFromScan0
; Description ...: Creates a Bitmap object based on an array of bytes along with size and format information
; Syntax.........: _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight[, $iStride = 0[, $iPixelFormat = 0x0026200A[, $pScan0 = 0]]])
; Parameters ....: $iWidth      - The bitmap width, in pixels
;                  $iHeight     - The bitmap height, in pixels
;                  $iStride     - Integer that specifies the byte offset between the beginning of one scan line and the next. This
;                  +is usually (but not necessarily) the number of bytes in the pixel format (for example, 2 for 16 bits per pixel)
;                  +multiplied by the width of the bitmap. The value passed to this parameter must be a multiple of four
;                  $iPixelFormat - Specifies the format of the pixel data. Can be one of the following:
;                  |$GDIP_PXF01INDEXED   - 1 bpp, indexed
;                  |$GDIP_PXF04INDEXED   - 4 bpp, indexed
;                  |$GDIP_PXF08INDEXED   - 8 bpp, indexed
;                  |$GDIP_PXF16GRAYSCALE - 16 bpp, grayscale
;                  |$GDIP_PXF16RGB555    - 16 bpp; 5 bits for each RGB
;                  |$GDIP_PXF16RGB565    - 16 bpp; 5 bits red, 6 bits green, and 5 bits blue
;                  |$GDIP_PXF16ARGB1555  - 16 bpp; 1 bit for alpha and 5 bits for each RGB component
;                  |$GDIP_PXF24RGB       - 24 bpp; 8 bits for each RGB
;                  |$GDIP_PXF32RGB       - 32 bpp; 8 bits for each RGB. No alpha.
;                  |$GDIP_PXF32ARGB      - 32 bpp; 8 bits for each RGB and alpha
;                  |$GDIP_PXF32PARGB     - 32 bpp; 8 bits for each RGB and alpha, pre-mulitiplied
;                  $pScan0      - Pointer to an array of bytes that contains the pixel data. The caller is responsible for
;                  +allocating and freeing the block of memory pointed to by this parameter.
; Return values .: Success      - Returns a handle to a new Bitmap object
;                  Failure      - 0 and either:
;                  |@error and @extended are set if DllCall failed
;                  |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: After you are done with the object, call _GDIPlus_ImageDispose to release the object resources
; Related .......: _GDIPlus_ImageDispose
; Link ..........; @@MsdnLink@@ GdipCreateBitmapFromScan0
; Example .......; Yes
; ===============================================================================================================================
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
EndFunc   ;==>_GDIPlus_BitmapCreateFromScan0

; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_GraphicsSetInterpolationMode
; Description ...: Sets the interpolation mode of a Graphics object
; Syntax.........: _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
; Parameters ....: $hGraphics          - Pointer to a Graphics object
;                  $iInterpolationMode - Interpolation mode:
;                  |0 - Default interpolation mode
;                  |1 - Low-quality mode
;                  |2 - High-quality mode
;                  |3 - Bilinear interpolation. No prefiltering is done
;                  |4 - Bicubic interpolation. No prefiltering is done
;                  |5 - Nearest-neighbor interpolation
;                  |6 - High-quality, bilinear interpolation. Prefiltering is performed to ensure high-quality shrinking
;                  |7 - High-quality, bicubic interpolation. Prefiltering is performed to ensure high-quality shrinking
; Return values .: Success      - True
;                  Failure      - False and either:
;                  |@error and @extended are set if DllCall failed
;                  |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: The interpolation mode determines the algorithm that is used when images are scaled or rotated
; Related .......: _GDIPlus_GraphicsGetInterpolationMode
; Link ..........; @@MsdnLink@@ GdipSetInterpolationMode
; Example .......; No
; ===============================================================================================================================
Func _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hGraphics, "int", $iInterpolationMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
EndFunc   ;==>_GDIPlus_GraphicsSetInterpolationMode

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
MattTheHuman

MattTheHuman,

try this:

#include <GDIPlus.au3>
_GDIPlus_Startup()
Global $sPrefix = @ScriptDir & "\"
Global $aImages[9] = [$sPrefix & "1.png", "", "", $sPrefix & "2.png", $sPrefix & "3.png", $sPrefix & "4.png", $sPrefix & "5.png", $sPrefix & "6.png", $sPrefix & "7.png"]

$iResult = _GDIPlus_AssembleImages($aImages, @ScriptDir & "\Assembled.jpg")
If Not @error Then ShellExecute(@ScriptDir & "\Assembled.jpg")

_GDIPlus_Shutdown()
Exit

Func _GDIPlus_AssembleImages($aFiles, $sFile, $iColumn = 3, $iRow = 3, $iW = 72, $iH = 72, $iInterpolation = 7) ;coded by UEZ 2013
    If Not IsArray($aFiles) Then Return SetError(1, 0, 0)
    If $sFile = "" Then Return SetError(2, 0, 0)
    If UBound($aFiles) <> ($iColumn * $iRow) Then Return SetError(3, 0, 0) ;amount of images must be the same as column * row
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW * $iColumn, $iH * $iRow) ;create a new empty bitmap
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;get handle to the empty bitmap
    _GDIPlus_GraphicsSetInterpolationMode($hContext, $iInterpolation) ;set interpolation mode to get better quality on resized images
    Local $x, $y, $i = 0, $hBmp
    For $y = 0 To $iRow - 1    ;fill images to the empty bitmap
        For $x = 0 To $iColumn - 1
            If $aFiles[$i] <> "" Then
                $hBmp = _GDIPlus_BitmapCreateFromFile($aFiles[$i]) ;load image
                If $hBmp Then _GDIPlus_GraphicsDrawImageRect($hContext, $hBmp, $x * $iW, $y * $iH, $iW, $iH) ;copy image to the appropriate position
                _GDIPlus_BitmapDispose($hBmp) ;dispose temp image otherwise memory leak
            EndIf
            $i += 1
        Next
    Next
    _GDIPlus_GraphicsDispose($hContext) ;dispose graphic context
    _GDIPlus_ImageSaveToFile($hBitmap, $sFile) ;save new created image
    If @error Then
        _GDIPlus_BitmapDispose($hBitmap)
        Return SetError(4, 0, 0)
    EndIf
    _GDIPlus_BitmapDispose($hBitmap)
    Return 1
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_BitmapCreateFromScan0
; Description ...: Creates a Bitmap object based on an array of bytes along with size and format information
; Syntax.........: _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight[, $iStride = 0[, $iPixelFormat = 0x0026200A[, $pScan0 = 0]]])
; Parameters ....: $iWidth         - The bitmap width, in pixels
;                  $iHeight     - The bitmap height, in pixels
;                  $iStride     - Integer that specifies the byte offset between the beginning of one scan line and the next. This
;                  +is usually (but not necessarily) the number of bytes in the pixel format (for example, 2 for 16 bits per pixel)
;                  +multiplied by the width of the bitmap. The value passed to this parameter must be a multiple of four
;                  $iPixelFormat - Specifies the format of the pixel data. Can be one of the following:
;                  |$GDIP_PXF01INDEXED   - 1 bpp, indexed
;                  |$GDIP_PXF04INDEXED   - 4 bpp, indexed
;                  |$GDIP_PXF08INDEXED   - 8 bpp, indexed
;                  |$GDIP_PXF16GRAYSCALE - 16 bpp, grayscale
;                  |$GDIP_PXF16RGB555    - 16 bpp; 5 bits for each RGB
;                  |$GDIP_PXF16RGB565    - 16 bpp; 5 bits red, 6 bits green, and 5 bits blue
;                  |$GDIP_PXF16ARGB1555  - 16 bpp; 1 bit for alpha and 5 bits for each RGB component
;                  |$GDIP_PXF24RGB       - 24 bpp; 8 bits for each RGB
;                  |$GDIP_PXF32RGB       - 32 bpp; 8 bits for each RGB. No alpha.
;                  |$GDIP_PXF32ARGB      - 32 bpp; 8 bits for each RGB and alpha
;                  |$GDIP_PXF32PARGB     - 32 bpp; 8 bits for each RGB and alpha, pre-mulitiplied
;                  $pScan0        - Pointer to an array of bytes that contains the pixel data. The caller is responsible for
;                  +allocating and freeing the block of memory pointed to by this parameter.
; Return values .: Success      - Returns a handle to a new Bitmap object
;                  Failure      - 0 and either:
;                  |@error and @extended are set if DllCall failed
;                  |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: After you are done with the object, call _GDIPlus_ImageDispose to release the object resources
; Related .......: _GDIPlus_ImageDispose
; Link ..........; @@MsdnLink@@ GdipCreateBitmapFromScan0
; Example .......; Yes
; ===============================================================================================================================
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
EndFunc   ;==>_GDIPlus_BitmapCreateFromScan0

; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_GraphicsSetInterpolationMode
; Description ...: Sets the interpolation mode of a Graphics object
; Syntax.........: _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
; Parameters ....: $hGraphics            - Pointer to a Graphics object
;                  $iInterpolationMode - Interpolation mode:
;                  |0 - Default interpolation mode
;                  |1 - Low-quality mode
;                  |2 - High-quality mode
;                  |3 - Bilinear interpolation. No prefiltering is done
;                  |4 - Bicubic interpolation. No prefiltering is done
;                  |5 - Nearest-neighbor interpolation
;                  |6 - High-quality, bilinear interpolation. Prefiltering is performed to ensure high-quality shrinking
;                  |7 - High-quality, bicubic interpolation. Prefiltering is performed to ensure high-quality shrinking
; Return values .: Success      - True
;                  Failure      - False and either:
;                  |@error and @extended are set if DllCall failed
;                  |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: The interpolation mode determines the algorithm that is used when images are scaled or rotated
; Related .......: _GDIPlus_GraphicsGetInterpolationMode
; Link ..........; @@MsdnLink@@ GdipSetInterpolationMode
; Example .......; No
; ===============================================================================================================================
Func _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hGraphics, "int", $iInterpolationMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
EndFunc   ;==>_GDIPlus_GraphicsSetInterpolationMode

Br,

UEZ

This is perfect. Thank you so much. The explanations are amazing too. I'll learn a lot from this. I'll reference you in my program too, thanks for the help!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×