Announcement

Collapse
No announcement yet.

GDIPlus image not saved to file

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • GDIPlus image not saved to file

    If anybody works with GDI+ I need yor help! Function GdipSaveImageToFile and GdipDisposeImage (after) returns ObjectBusy. I found example here.

    Code:
    [font=Courier New][size=2]gdiplusToken [color=#FF0000]=[/color] 0[color=#FF0000];[/color]
    
    [color=#008000][i]-- exit application[/i][/color]
    [color=#0000FF][b]function[/b][/color] AppExit()
        [color=#008000][i]-- free image[/i][/color]
        [color=#0000FF][b]if[/b][/color] (image [color=#0000FF][b]and[/b][/color] MemoryEx[color=#FF0000].[/color]DWORD(image) [color=#FF0000]~[/color][color=#FF0000]=[/color] 0) [color=#0000FF][b]then[/b][/color]
            GDIE_STATE [color=#FF0000]=[/color] GDI[color=#FF0000].[/color]GdipDisposeImage(image)[color=#FF0000];[/color]
            [color=#0000FF][b]if[/b][/color] (GDIE_STATE [color=#FF0000]~[/color][color=#FF0000]=[/color] GDI_OK) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI error"[/color][color=#FF0000],[/color] [color=#800080]"GdipDisposeImage: "[/color] [color=#FF0000].[/color][color=#FF0000].[/color] GDI_ERROR[color=#FF0000][[/color]GDIE_STATE[color=#FF0000]][/color])[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]end[/b][/color]
        [color=#008000][i]-- shutdown GDI+[/i][/color]
        [color=#0000FF][b]if[/b][/color] (gdiplusToken [color=#FF0000]~[/color][color=#FF0000]=[/color] 0) [color=#0000FF][b]then[/b][/color]
            GDIE_STATE [color=#FF0000]=[/color] GDI[color=#FF0000].[/color]GdiplusShutdown(gdiplusToken)[color=#FF0000];[/color]
            [color=#0000FF][b]if[/b][/color] (GDIE_STATE [color=#FF0000]~[/color][color=#FF0000]=[/color] GDI_OK) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI error"[/color][color=#FF0000],[/color] [color=#800080]"GdiplusShutdown: "[/color] [color=#FF0000].[/color][color=#FF0000].[/color] GDI_ERROR[color=#FF0000][[/color]GDIE_STATE[color=#FF0000]][/color])[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]end[/b][/color]
        [color=#008000][i]-- free some memory[/i][/color]
        [color=#0000FF][b]if[/b][/color] (zero)                 [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(zero)[color=#FF0000];[/color]                 [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (pfilePNG)             [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(pfilePNG)[color=#FF0000];[/color]             [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (pCLSID)               [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(pCLSID)[color=#FF0000];[/color]               [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (pstrCLSID)            [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(pstrCLSID)[color=#FF0000];[/color]            [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (image)                [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(image)[color=#FF0000];[/color]                [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (pfileBMP)             [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(pfileBMP)[color=#FF0000];[/color]             [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (pgdiplusStartupInput) [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(pgdiplusStartupInput)[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
        [color=#0000FF][b]if[/b][/color] (pgdiplusToken)        [color=#0000FF][b]then[/b][/color] MemoryEx[color=#FF0000].[/color]Free(pgdiplusToken)[color=#FF0000];[/color]        [color=#0000FF][b]end[/b][/color]
        Window[color=#FF0000].[/color]Close(Application[color=#FF0000].[/color]GetWndHandle()[color=#FF0000],[/color] CLOSEWND_TERMINATE)[color=#FF0000];[/color]
    [color=#0000FF][b]end[/b][/color]
    
    [color=#008000][i]-- loading libraries[/i][/color]
    OLE [color=#FF0000]=[/color] Library[color=#FF0000].[/color]Load([color=#800080]"OLE32.dll"[/color])[color=#FF0000];[/color]
    GDI [color=#FF0000]=[/color] Library[color=#FF0000].[/color]Load([color=#800080]"GDIPLUS.dll"[/color])[color=#FF0000];[/color]
    
    [color=#008000][i]-- GDI+ error codes[/i][/color]
    GDI_OK    [color=#FF0000]=[/color] 0[color=#FF0000];[/color]
    GDI_STATE [color=#FF0000]=[/color] 0[color=#FF0000];[/color]
    GDI_ERROR [color=#FF0000]=[/color] [color=#FF0000]{[/color][color=#800080]"GenericError"[/color][color=#FF0000],[/color] [color=#800080]"InvalidParameter"[/color][color=#FF0000],[/color] [color=#800080]"OutOfMemory"[/color][color=#FF0000],[/color] [color=#800080]"ObjectBusy"[/color][color=#FF0000],[/color] [color=#800080]"InsufficientBuffer"[/color][color=#FF0000],[/color] [color=#800080]"NotImplemented"[/color][color=#FF0000],[/color] [color=#800080]"Win32Error"[/color][color=#FF0000],[/color] [color=#800080]"WrongState"[/color][color=#FF0000],[/color] [color=#800080]"Aborted"[/color][color=#FF0000],[/color] [color=#800080]"FileNotFound"[/color][color=#FF0000],[/color] [color=#800080]"ValueOverflow"[/color][color=#FF0000],[/color] [color=#800080]"AccessDenied"[/color][color=#FF0000],[/color] [color=#800080]"UnknownImageFormat"[/color][color=#FF0000],[/color] [color=#800080]"FontFamilyNotFound"[/color][color=#FF0000],[/color] [color=#800080]"FontStyleNotFound"[/color][color=#FF0000],[/color] [color=#800080]"NotTrueTypeFont"[/color][color=#FF0000],[/color] [color=#800080]"UnsupportedGdiplusVersion"[/color][color=#FF0000],[/color] [color=#800080]"GdiplusNotInitialized"[/color][color=#FF0000],[/color] [color=#800080]"PropertyNotFound"[/color][color=#FF0000],[/color] [color=#800080]"PropertyNotSupported"[/color][color=#FF0000],[/color] [color=#800080]"ProfileNotFound"[/color][color=#FF0000]}[/color][color=#FF0000];[/color]
    
    [color=#008000][i]-- define file paths[/i][/color]
    [color=#0000FF][b]local[/b][/color] fileBMP [color=#FF0000]=[/color] _SourceFolder [color=#FF0000].[/color][color=#FF0000].[/color] [color=#800080]"\\AutoPlay\\Images\\i.bmp"[/color]
    [color=#0000FF][b]local[/b][/color] filePNG [color=#FF0000]=[/color] _SourceFolder [color=#FF0000].[/color][color=#FF0000].[/color] [color=#800080]"\\AutoPlay\\Images\\o.png"[/color][color=#FF0000];[/color]
    
    [color=#008000][i]-- pointer to GDI+ Token[/i][/color]
    pgdiplusToken [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(4)[color=#FF0000];[/color]
    [color=#008000][i]-- define structure gdiplusStartupInput[/i][/color]
    [color=#0000FF][b]local[/b][/color] gdiplusStartupInput [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]DefineStruct[color=#FF0000]{[/color]UDWORD ([color=#800080]"GdiplusVersion"[/color])[color=#FF0000];[/color] UDWORD ([color=#800080]"DebugEventCallback"[/color])[color=#FF0000];[/color] BYTE ([color=#800080]"SuppressBackgroundThread"[/color])[color=#FF0000];[/color] BYTE ([color=#800080]"SuppressExternalCodecs"[/color])[color=#FF0000];[/color][color=#FF0000]}[/color][color=#FF0000];[/color]
    [color=#008000][i]-- create structure gdiplusStartupInput[/i][/color]
    [color=#0000FF][b]local[/b][/color] hgdiplusStartupInput [color=#FF0000]=[/color] gdiplusStartupInput[color=#FF0000]:[/color]New()[color=#FF0000];[/color]
    [color=#008000][i]-- fill structure gdiplusStartupInput[/i][/color]
    hgdiplusStartupInput[color=#FF0000].[/color]GdiplusVersion           [color=#FF0000]=[/color] 1[color=#FF0000];[/color]
    hgdiplusStartupInput[color=#FF0000].[/color]DebugEventCallback       [color=#FF0000]=[/color] 0[color=#FF0000];[/color]
    hgdiplusStartupInput[color=#FF0000].[/color]SuppressBackgroundThread [color=#FF0000]=[/color] [color=#0000FF][b]false[/b][/color][color=#FF0000];[/color]
    hgdiplusStartupInput[color=#FF0000].[/color]SuppressExternalCodecs   [color=#FF0000]=[/color] [color=#0000FF][b]false[/b][/color][color=#FF0000];[/color]
    [color=#008000][i]-- pointer to structure gdiplusStartupInput[/i][/color]
    pgdiplusStartupInput [color=#FF0000]=[/color] hgdiplusStartupInput[color=#FF0000]:[/color]GetPointer()[color=#FF0000];[/color]
    
    [color=#008000][i]-- init GDI+[/i][/color]
    GDIE_STATE [color=#FF0000]=[/color] GDI[color=#FF0000].[/color]GdiplusStartup(pgdiplusToken[color=#FF0000],[/color] pgdiplusStartupInput[color=#FF0000],[/color] 0)[color=#FF0000];[/color]
    [color=#0000FF][b]if[/b][/color] (GDIE_STATE [color=#FF0000]~[/color][color=#FF0000]=[/color] GDI_OK) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI error"[/color][color=#FF0000],[/color] [color=#800080]"GdiplusStartup: "[/color] [color=#FF0000].[/color][color=#FF0000].[/color] GDI_ERROR[color=#FF0000][[/color]GDIE_STATE[color=#FF0000]][/color])[color=#FF0000];[/color] Window[color=#FF0000].[/color]Close(Application[color=#FF0000].[/color]GetWndHandle()[color=#FF0000],[/color] CLOSEWND_TERMINATE)[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
    gdiplusToken [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]DWORD(pgdiplusToken)[color=#FF0000];[/color]
    [color=#0000FF][b]if[/b][/color] (gdiplusToken [color=#FF0000]=[/color][color=#FF0000]=[/color] 0) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI error"[/color][color=#FF0000],[/color] [color=#800080]"gdiplusToken: 0"[/color])[color=#FF0000];[/color] Window[color=#FF0000].[/color]Close(Application[color=#FF0000].[/color]GetWndHandle()[color=#FF0000],[/color] CLOSEWND_TERMINATE)[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
    
    [color=#008000][i]-- path to source image file (Unicode, NULL terminated)[/i][/color]
    pfileBMP [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(String[color=#FF0000].[/color]Length(fileBMP) [color=#FF0000]*[/color] 2 [color=#FF0000]+[/color] 1)[color=#FF0000];[/color]
    MemoryEx[color=#FF0000].[/color]String(pfileBMP[color=#FF0000],[/color] [color=#FF0000]-[/color]1[color=#FF0000],[/color] MEMEX_UNICODE[color=#FF0000],[/color] fileBMP)[color=#FF0000];[/color]
    image [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(4)[color=#FF0000];[/color]
    [color=#008000][i]-- loading source image[/i][/color]
    GDIE_STATE [color=#FF0000]=[/color] GDI[color=#FF0000].[/color]GdipLoadImageFromFile(pfileBMP[color=#FF0000],[/color] image)[color=#FF0000];[/color]
    [color=#0000FF][b]if[/b][/color] (GDIE_STATE [color=#FF0000]~[/color][color=#FF0000]=[/color] GDI_OK) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI error"[/color][color=#FF0000],[/color] [color=#800080]"GdipLoadImageFromFile: "[/color] [color=#FF0000].[/color][color=#FF0000].[/color] GDI_ERROR[color=#FF0000][[/color]GDIE_STATE[color=#FF0000]][/color])[color=#FF0000];[/color] AppExit()[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
    
    [color=#008000][i]-- get PNG encoder ID[/i][/color]
    [color=#0000FF][b]local[/b][/color] strCLSID  [color=#FF0000]=[/color] [color=#800080]"{557CF406-1A04-11D3-9A73-0000F81EF32E}"[/color][color=#FF0000];[/color]
    pstrCLSID [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(String[color=#FF0000].[/color]Length(strCLSID) [color=#FF0000]*[/color] 2 [color=#FF0000]+[/color] 1)[color=#FF0000];[/color]
    MemoryEx[color=#FF0000].[/color]String(pstrCLSID[color=#FF0000],[/color] [color=#FF0000]-[/color]1[color=#FF0000],[/color] MEMEX_UNICODE[color=#FF0000],[/color] strCLSID)[color=#FF0000];[/color]
    pCLSID [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(16)[color=#FF0000];[/color]
    GDIE_STATE [color=#FF0000]=[/color] OLE[color=#FF0000].[/color]CLSIDFromString(pstrCLSID[color=#FF0000],[/color] pCLSID)[color=#FF0000];[/color]
    [color=#0000FF][b]if[/b][/color] (GDIE_STATE [color=#FF0000]~[/color][color=#FF0000]=[/color] GDI_OK) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"OLE32 error"[/color][color=#FF0000],[/color] [color=#800080]"CLSIDFromString: "[/color] [color=#FF0000].[/color][color=#FF0000].[/color] GDIE_STATE)[color=#FF0000];[/color] AppExit()[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
    [color=#008000][i]-- pCLSID is a pointer to 16-bytes binary encoder ID, must be 0x06F47C55041AD3119A730000F81EF32E (checked)[/i][/color]
    
    [color=#008000][i]-- path to output image file (Unicode, NULL terminated)[/i][/color]
    pfilePNG [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(String[color=#FF0000].[/color]Length(filePNG) [color=#FF0000]*[/color] 2 [color=#FF0000]+[/color] 1)[color=#FF0000];[/color]
    MemoryEx[color=#FF0000].[/color]String(pfilePNG[color=#FF0000],[/color] [color=#FF0000]-[/color]1[color=#FF0000],[/color] MEMEX_UNICODE[color=#FF0000],[/color] filePNG)[color=#FF0000];[/color]
    zero [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]Allocate(4)[color=#FF0000];[/color] [color=#008000][i]-- pointer to constant [DWORD] = 0, info here http://www.vbforums.com/showthread.php?663593.html[/i][/color]
    [color=#008000][i]-- save image as PNG-file[/i][/color]
    GDIE_STATE [color=#FF0000]=[/color] GDI[color=#FF0000].[/color]GdipSaveImageToFile(image[color=#FF0000],[/color] pfilePNG[color=#FF0000],[/color] pCLSID[color=#FF0000],[/color] zero)[color=#FF0000];[/color]
    [color=#0000FF][b]if[/b][/color] (GDIE_STATE [color=#FF0000]~[/color][color=#FF0000]=[/color] GDI_OK) [color=#0000FF][b]then[/b][/color] Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI error"[/color][color=#FF0000],[/color] [color=#800080]"GdipSaveImageToFile: "[/color] [color=#FF0000].[/color][color=#FF0000].[/color] GDI_ERROR[color=#FF0000][[/color]GDIE_STATE[color=#FF0000]][/color])[color=#FF0000];[/color] AppExit()[color=#FF0000];[/color] [color=#0000FF][b]end[/b][/color]
    Dialog[color=#FF0000].[/color]Message([color=#800080]"GDI"[/color][color=#FF0000],[/color] [color=#800080]"PNG file saved!"[/color])[color=#FF0000];[/color][/size][/font]

  • #2
    Errors in code found.

    Comment

    Working...
    X