Jump to content

Proper Struct for GdipGetAllPropertyItems


Recommended Posts

Struggling a bit to get this GDI+ function converted to AutoIt.

#include <GDIPlus.au3>

_GDIPlus_Startup()

Global $hImage = _GDIPlus_ImageLoadFromFile("F:\DCIM\Camera\20170515_111804.jpg")

Global $tBufferSize = DllStructCreate("uint")
Global $tProperties = DllStructCreate("uint")
_GDIPlus_GetPropertySize($hImage, $tBufferSize, $tProperties)
Global $tAllItems = DllStructCreate("struct;char[" & DllStructGetData($tBufferSize, 1) & "];endstruct")
_GDIPlus_GetAllPropertyItems($hImage, $tBufferSize, $tProperties, $tPropertyItem)

_GDIPlus_ImageDispose($hImage)

_GDIPlus_Shutdown()

Func _GDIPlus_GetAllPropertyItems(ByRef $hImage, Const $tTotalBufferSize, Const $tNumProperties, ByRef $tAllItems)
    If (Not IsDllStruct($tPropertyItem)) Then Return SetError(-1, 0, "")
    Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetAllPropertyItems", "hwnd", $hImage, "unit", DllStructGetData($tTotalBufferSize, 1), "uint", DllStructGetData($tNumProperties, 1), "ptr", DllStructGetPtr($tAllItems))
    If (@error) Then Return SetError(@error, @extended, ConsoleWrite("@Error = " & @error & @LF))
    If ($aResult[0]) Then Return SetError($aResult[0], @extended, "")
    Return $aResult[0]
EndFunc   ;==>_GDIPlus_GetAllPropertyItems

Func _GDIPlus_GetPropertySize(Const ByRef $hImage, ByRef $tTotalBufferSize, ByRef $tNumProperties)
    If (Not IsDllStruct($tTotalBufferSize)) Then Return SetError(-1, 0, "")
    If (Not IsDllStruct($tNumProperties)) Then Return SetError(-2, 0, "")
    Local $aResult = DllCall($__g_hGDIPDll, "uint", "GdipGetPropertySize", "hwnd", $hImage, "uint_ptr", DllStructGetPtr($tTotalBufferSize), "uint_ptr", DllStructGetPtr($tNumProperties))
    If (@error) Then Return SetError(@error, @extended, "")
    If ($aResult[0]) Then Return SetError($aResult[0], 0, "")
    Return $aResult[0]
EndFunc   ;==>_GDIPlus_GetPropertySize

Got the GetPropertySize function to work, gives me the correct buffer size and the property count, but I cannot figure out how to get the struct for the all items.

Function on MSDN:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms535372(v=vs.85).aspx

Struct needed:

Quote

allItems [out]

    Type: PropertyItem*

    Pointer to an array of PropertyItem objects that receives the property items.

PropertyItem class:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534493(v=vs.85).aspx

Found other topics about this function in other languages where they used a blank string as the buffer, so I tried using a char array, which doesn't work. Just cannot figure out how to create the struct buffer to hold the data.

Link to comment
Share on other sites

You can check out GDIP.au3 and look for _GDIPlus_ImageGetAllPropertyItems() function.

 

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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

19 hours ago, InunoTaishou said:

Why are these not currently implemented in the latest GDIPlus.au3 file?

I've added some additional GDI+ functions last year already which will be released on the next beta but I cannot tell you when exactly but _GDIPlus_GetAllPropertyItems was not included.

The question is which of those GDI+ should be added and which not.

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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
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
 Share

×
×
  • Create New...