Page 1 of 2

GDI Plus version 1.1 wrapper for PureBasic 4.02

Posted: Fri Mar 30, 2007 6:55 pm
by SFSxOI
Features:

609 functions from the latest GdiPlus.lib (available in the Vista SDK)
Includes 40 helper procedures For common graphics objects (16 are image manipulation procedures)
Includes 32 wrapped methods from GdiPlusGraphics.h
Includes all constants And structures For GDI Plus version 1.1
Includes image file conversions from one type To another
Includes .jpeg compression
Includes .tif color bit depth conversion
Includes several example And basic framework .pb files of basic usage, nothing fancy, real basic.

Operating Systems Supported: WindowsXP (With gdi plus version 1.1 installed), Windows Vista
NOTE: might also work With Windows 2000 And Windows 2003 With gdi plus version 1.1 installed, but Not tested)

Files included:

gdiplus_11.pbi (main include file), gdiplus_Constants.pbi, gdiplus_Structures.pbi
gdiplus_apimacros.pbi, gdiplus_GUID.pbi, gdiplus.lib (most current from the Vista SDK included in .zip)
gdiplus_11_not_implement_functions.pbi

Note: For gdiplus_11_not_implement_functions.pbi:
Read the Import "gdiplus.lib" comments at the bottom of the section.
These are Not implemented in system gdiplus.dll but are on a per application basis
If the app supplies a gdiplus.dll With the functions in it.

Requires:

The Macros Framework For Creating COM Objects by freak located at
http://www.purebasic.fr/english/viewtopic.php?t=22132
If you do Not have the Macros Framework you will need To convert the GUID's to datasections yourself.

Instructions For use:
Unzip all files into a directory of your choice. Include gdiplus_11.pbi in your project.

Help And Support:
There is no help file supplied. The example files pretty much tells you the basics. The gdiplus_11.pbi
file has comments in certain areas. The basic GDI Plus functions are documented at:
http://msdn.microsoft.com/library/Defau ... erence.asp
And at a ton of other places on the net.

Credit And Acknowledgements:
Listed at the top of the gdiplus_11.pbi file

You can download the latest .zip here:
http://home.comcast.net/~sfsxoi/gdiplus11_v3a.zip
(the gdiplus11.zip is approximately 730 Kb As it includes some images used by the examples)

(Please provide feedback for changes, correction, or improvement.)

Thank You

Posted: Sun Apr 01, 2007 3:44 pm
by SFSxOI
Newer version uploaded to the link in the first post. Corrected a few errors, added some more methods from the GDI+ header files.

Posted: Tue Apr 03, 2007 11:29 pm
by SFSxOI
Newer version at above link. Some corrections made as a result of feedback. Increased the number of gdiplus header file methods to 78 per request.

Posted: Sun Apr 08, 2007 3:26 pm
by SFSxOI
New version at link in original post above, zip file gdiplus11_v2.zip. Added more of the header file methods, a structure addition, a constants addition, added the SetStatus method from the header files. A couple of minor corrections.

Posted: Thu Apr 19, 2007 9:25 pm
by SFSxOI
New version at link in original post above, zip file gdiplus11_v3a.zip. About 90% of the header file wrapped methods included now. A few minor corrections made and a little refinement in the helper functions, a few adjustments in the organization or comments (will eventually remove most of the comments).

Posted: Fri Apr 20, 2007 11:44 am
by inc.
Even I didn't test it yet ....
thanks for all your efforts! :-) I think that should be said.

Posted: Fri Apr 20, 2007 4:01 pm
by BluesInA
i second that - a great effort. a novice like me could use a few more examples. can anyone post an example of loading an image from memory using this wrapper? i took a look at netmaestro's (i think) gdi+ code for doing that but i was soon overwhelmed by it all.

mike

Posted: Sat Apr 21, 2007 2:02 pm
by Denis
Hi mike,

i don't know if it is what you're looking for.
This example use a callback to repaint the image i've loaded with catchimage before creating a GDI+ bitmap.

Code: Select all

XIncludeFile "..\..\..\gdiplus.pbi"

EnableExplicit

#MainWindow = 0
#Image = 0

Global *token, *image, hBitmap.l

Procedure myCallback(window, message, wParam, lParam)
   Protected dc.l, ps.PAINTSTRUCT, *Localgfx
   Select message
      Case #WM_PAINT
         dc = BeginPaint_(window, @ps)
         If dc
            If GdipCreateFromHDC(dc, @*Localgfx) = #Ok
               GdipDrawImageI(*Localgfx, *image, 50, 50)
               GdipDeleteGraphics(*Localgfx)
            EndIf
            EndPaint_(window, @ps)
         EndIf
   EndSelect
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

hBitmap = CatchImage(#Image, ?Img)

If hBitmap And OpenWindow(#MainWindow, 0, 0, 340, 280, "GdiPlus 1.0 - GdipCreateBitmapFromHBITMAP", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
   *token = Gdiplus_New()
   If *token
      If GdipCreateBitmapFromHBITMAP(hBitmap, #Null, @*image) = #Ok
         SetWindowCallback(@myCallback(), #MainWindow)

         Repeat
         Until WaitWindowEvent() = #PB_Event_CloseWindow
            
         GdipDisposeImage(*image)
      EndIf
      GdiplusShutdown(*token)
   EndIf
EndIf
End

DataSection
   Img :
      Data.l $0E5E4D42, $00000000, $04360000, $00280000, $00320000, $00320000
      Data.l $00010000, $00000008, $0A280000, $08780000, $08780000, $00000000
      Data.l $00000000, $00000000, $00000000, $80000080, $80000000, $00800080
      Data.l $00800000, $80800080, $80800000, $DCC00080, $CAF000C0, $3FAA00A6
      Data.l $3FFF002A, $5F00002A, $5F55002A, $5FAA002A, $5FFF002A, $7F00002A
      Data.l $7F55002A, $7FAA002A, $7FFF002A, $9F00002A, $9F55002A, $9FAA002A
      Data.l $9FFF002A, $BF00002A, $BF55002A, $BFAA002A, $BFFF002A, $DF00002A
      Data.l $DF55002A, $DFAA002A, $DFFF002A, $FF00002A, $FF55002A, $FFAA002A
      Data.l $FFFF002A, $0000002A, $00550055, $00AA0055, $00FF0055, $1F000055
      Data.l $1F550055, $1FAA0055, $1FFF0055, $3F000055, $3F550055, $3FAA0055
      Data.l $3FFF0055, $5F000055, $5F550055, $5FAA0055, $5FFF0055, $7F000055
      Data.l $7F550055, $7FAA0055, $7FFF0055, $9F000055, $9F550055, $9FAA0055
      Data.l $9FFF0055, $BF000055, $BF550055, $BFAA0055, $BFFF0055, $DF000055
      Data.l $DF550055, $DFAA0055, $DFFF0055, $FF000055, $FF550055, $FFAA0055
      Data.l $FFFF0055, $00000055, $0055007F, $00AA007F, $00FF007F, $1F00007F
      Data.l $1F55007F, $1FAA007F, $1FFF007F, $3F00007F, $3F55007F, $3FAA007F
      Data.l $3FFF007F, $5F00007F, $5F55007F, $5FAA007F, $5FFF007F, $7F00007F
      Data.l $7F55007F, $7FAA007F, $7FFF007F, $9F00007F, $9F55007F, $9FAA007F
      Data.l $9FFF007F, $BF00007F, $BF55007F, $BFAA007F, $BFFF007F, $DF00007F
      Data.l $DF55007F, $DFAA007F, $DFFF007F, $FF00007F, $FF55007F, $FFAA007F
      Data.l $FFFF007F, $0000007F, $005500AA, $00AA00AA, $00FF00AA, $1F0000AA
      Data.l $1F5500AA, $1FAA00AA, $1FFF00AA, $3F0000AA, $3F5500AA, $3FAA00AA
      Data.l $3FFF00AA, $5F0000AA, $5F5500AA, $5FAA00AA, $5FFF00AA, $7F0000AA
      Data.l $7F5500AA, $7FAA00AA, $7FFF00AA, $9F0000AA, $9F5500AA, $9FAA00AA
      Data.l $9FFF00AA, $BF0000AA, $BF5500AA, $BFAA00AA, $BFFF00AA, $DF0000AA
      Data.l $DF5500AA, $DFAA00AA, $DFFF00AA, $FF0000AA, $FF5500AA, $FFAA00AA
      Data.l $FFFF00AA, $000000AA, $005500D4, $00AA00D4, $00FF00D4, $1F0000D4
      Data.l $1F5500D4, $1FAA00D4, $1FFF00D4, $3F0000D4, $3F5500D4, $3FAA00D4
      Data.l $3FFF00D4, $5F0000D4, $5F5500D4, $5FAA00D4, $5FFF00D4, $7F0000D4
      Data.l $7F5500D4, $7FAA00D4, $7FFF00D4, $9F0000D4, $9F5500D4, $9FAA00D4
      Data.l $9FFF00D4, $BF0000D4, $BF5500D4, $BFAA00D4, $BFFF00D4, $DF0000D4
      Data.l $DF5500D4, $DFAA00D4, $DFFF00D4, $FF0000D4, $FF5500D4, $FFAA00D4
      Data.l $FFFF00D4, $005500D4, $00AA00FF, $1F0000FF, $1F5500FF, $1FAA00FF
      Data.l $1FFF00FF, $3F0000FF, $3F5500FF, $3FAA00FF, $3FFF00FF, $5F0000FF
      Data.l $5F5500FF, $5FAA00FF, $5FFF00FF, $7F0000FF, $7F5500FF, $7FAA00FF
      Data.l $7FFF00FF, $9F0000FF, $9F5500FF, $9FAA00FF, $9FFF00FF, $BF0000FF
      Data.l $BF5500FF, $BFAA00FF, $BFFF00FF, $DF0000FF, $DF5500FF, $DFAA00FF
      Data.l $DFFF00FF, $FF5500FF, $FFAA00FF, $CCFF00FF, $CCFF00CC, $FFFF00FF
      Data.l $FFFF0033, $FFFF0066, $FFFF0099, $7F0000CC, $7F550000, $7FAA0000
      Data.l $7FFF0000, $9F000000, $9F550000, $9FAA0000, $9FFF0000, $BF000000
      Data.l $BF550000, $BFAA0000, $BFFF0000, $DF000000, $DF550000, $DFAA0000
      Data.l $DFFF0000, $FF550000, $FFAA0000, $00000000, $0055002A, $00AA002A
      Data.l $00FF002A, $1F00002A, $1F55002A, $1FAA002A, $1FFF002A, $3F00002A
      Data.l $3F55002A, $FBF0002A, $A0A400FF, $808000A0, $00000080, $FF0000FF
      Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $FFFF00FF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $00FFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $00FFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $0000FFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $0000FFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $000000FF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $FFFFFFFF, $0000FFFF, $00000000, $00000000
      Data.l $00000000, $FFFFFFFF, $00FA0000, $00000000, $FF000000, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $00000000, $00000000
      Data.l $00000000, $00000000, $FFFFFFFF, $00FA0000, $00000000, $00000000
      Data.l $FFFFFF00, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $02020000
      Data.l $02020202, $02020202, $00000202, $00FFFFFF, $FAFAFA00, $FAFAFAFA
      Data.l $00FAFAFA, $FFFFFF00, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $00FFFFFF
      Data.l $02020200, $02020202, $02020202, $00000202, $00FFFFFF, $FAFAFA00
      Data.l $FAFAFAFA, $FAFAFAFA, $FFFF0000, $FFFFFFFF, $FFFF0000, $FFFFFFFF
      Data.l $0000FFFF, $02020200, $02020202, $02020202, $00000202, $0000FFFF
      Data.l $FAFAFAFA, $FAFAFAFA, $FAFAFAFA, $FFFF0000, $FFFFFFFF, $FFFF0000
      Data.l $FFFFFFFF, $0000FFFF, $02020202, $02020202, $02020202, $00000202
      Data.l $0000FFFF, $FAFAFAFA, $FAFAFAFA, $FAFAFAFA, $FF0000FA, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $000000FF, $02020202, $02020202, $02020202
      Data.l $00000202, $0000FFFF, $FAFAFAFA, $FAFAFAFA, $FAFAFAFA, $FF0000FA
      Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $000000FF, $02020200, $02020202
      Data.l $02020202, $00000202, $0000FFFF, $FAFAFAFA, $FAFAFAFA, $FAFAFAFA
      Data.l $0000FAFA, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FAFA0000, $02020000
      Data.l $02020202, $02020202, $00000202, $00FFFFFF, $FAFAFA00, $FAFAFAFA
      Data.l $FAFAFAFA, $00FAFAFA, $FFFFFF00, $FFFF0000, $FFFFFFFF, $FAFA0000
      Data.l $02020000, $02020202, $02020202, $00000202, $FFFFFFFF, $FAFA0000
      Data.l $FAFAFAFA, $FAFAFAFA, $00FAFAFA, $FFFFFF00, $FFFF0000, $00FFFFFF
      Data.l $FAFAFA00, $000000FA, $00000000, $00000000, $00000000, $FFFFFFFF
      Data.l $00FA0000, $00000000, $00000000, $00000000, $FFFF0000, $FFFF0000
      Data.l $00FFFFFF, $FAFAFAFA, $FF0000FA, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $000000FF, $FFFFFFFF, $0000FFFF, $00020202, $FFFF0000
      Data.l $FFFF0000, $0000FFFF, $FAFAFAFA, $0000FAFA, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $000000FF, $FFFFFFFF, $020000FF, $02020202
      Data.l $FF000002, $FFFF0000, $FA0000FF, $FAFAFAFA, $00FAFAFA, $FFFFFF00
      Data.l $FF00FFFF, $FFFFFFFF, $FFFFFFFF, $0000FFFF, $FFFFFFFF, $02020000
      Data.l $02020202, $00000202, $FFFF0000, $FA0000FF, $FAFAFAFA, $00FAFAFA
      Data.l $FFFFFF00, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $00FFFFFF, $FFFFFFFF
      Data.l $02020000, $02020202, $00000202, $FFFF0000, $FA0000FF, $FAFAFAFA
      Data.l $FAFAFAFA, $00000000, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $00FFFFFF
      Data.l $00FFFFFF, $02020200, $02020202, $00000202, $FFFF0000, $FA0000FF
      Data.l $FAFAFAFA, $FAFAFAFA, $00000000, $FFFFFF00, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $00FFFFFF, $02020200, $02020202, $00000202, $FFFF0000
      Data.l $FA0000FF, $FAFAFAFA, $FAFAFAFA, $000000FA, $FFFFFF00, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $0000FFFF, $02020202, $02020202, $00000202
      Data.l $FFFF0000, $0000FFFF, $FAFAFAFA, $FAFAFAFA, $0000FAFA, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $000000FF, $02020202, $02020202
      Data.l $FF000002, $FFFF0000, $00FFFFFF, $FAFAFAFA, $FAFAFAFA, $000000FA
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $020000FF, $02020202
      Data.l $02020202, $FFFF0000, $FFFF0000, $00FFFFFF, $FAFAFA00, $FAFAFAFA
      Data.l $FF0000FA, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $02020000
      Data.l $02020202, $02020202, $FFFF0000, $FFFF0000, $FFFFFFFF, $FAFA0000
      Data.l $FAFAFAFA, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $02020000, $02020202, $00020202, $FFFFFF00, $FFFF0000, $00FFFFFF
      Data.l $FAFA0000, $FAFAFAFA, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $00FFFFFF, $02000000, $02020202, $00020202, $FFFFFF00, $FFFF0000
      Data.l $000000FF, $00000000, $00000000, $FFFFFF00, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $000000FF, $02020200, $00000202, $FFFFFFFF
      Data.l $00FF0000, $00000000, $00000000, $00000000, $FFFFFFFF, $FF000000
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $00FFFFFF, $02020000, $FF000002
      Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $0000FFFF
      Data.l $FF000000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $000000FF
      Data.l $FF000002, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $000000FF, $00000202, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $0000FFFF, $FFFF0000, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF
      Data.l $00FFFFFF, $02020000, $00000202, $00FFFF00, $00000000, $00000000
      Data.l $00000000, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFF0000, $FFFFFFFF
      Data.l $FFFFFFFF, $000000FF, $02020202, $00020202, $FFFFFF00, $000000FF
      Data.l $FAFAFAFA, $00FAFAFA, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000
      Data.l $FFFFFFFF, $FFFFFFFF, $02000000, $02020202, $02020202, $FFFF0000
      Data.l $0000FFFF, $FAFAFA00, $00FAFAFA, $FFFFFF00, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $FFFFFFFF, $020000FF, $02020202, $02020202
      Data.l $FFFF0000, $0000FFFF, $FAFAFAFA, $FAFAFAFA, $FFFF0000, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $020000FF, $02020202
      Data.l $02020202, $FF000002, $0000FFFF, $FAFAFAFA, $FAFAFAFA, $FFFF0000
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $0000FFFF
      Data.l $02020202, $02020202, $FF000002, $0000FFFF, $FAFAFAFA, $FAFAFAFA
      Data.l $FF0000FA, $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF
      Data.l $00FFFFFF, $02020200, $02020202, $00000202, $FA0000FF, $FAFAFAFA
      Data.l $FAFAFAFA, $0000FA00, $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF
      Data.l $FFFFFFFF, $00FFFFFF, $02020200, $02020202, $00020202, $FAFA0000
      Data.l $FAFAFAFA, $FAFAFAFA, $00000000, $FFFFFFFF, $FFFFFFFF, $FFFF0000
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $02020000, $02020202, $00020202
      Data.l $FAFA0000, $FAFAFAFA, $00FAFAFA, $00000000, $FFFFFF00, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $02020000, $02020202
      Data.l $00020202, $FAFAFA00, $FAFAFAFA, $00FAFAFA, $0000FFFF, $FFFFFF00
      Data.l $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $020000FF
      Data.l $02020202, $00020202, $FAFAFA00, $FAFAFAFA, $0000FAFA, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $000000FF, $02020202, $00000202, $FAFAFAFA, $FAFAFAFA, $FF0000FA
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $0000FFFF, $02020202, $FA000002, $FAFAFAFA, $FAFAFAFA
      Data.l $FF000000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $00FFFFFF, $00000000, $00000000, $00000000
      Data.l $00000000, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFF0000
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $000000FF, $00000000
      Data.l $00000000, $00000000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
      Data.b - 1, -1, -1, -1, 0, 0
EndDataSection

Posted: Sat Apr 21, 2007 3:19 pm
by BluesInA
denis,

thanks very much for your help. it works for me and it's a nice example to learn a few things from.

mike

Posted: Sat Apr 21, 2007 4:10 pm
by netmaestro
Here's how to catch the gdiplus image from memory directly:

Code: Select all

; gdiplus CatchImage 

  Length = ?pic_end-?pic_start 
  g1 = GlobalAlloc_(#GHND, Length) 
  *buffer = GlobalLock_(g1) 
  CopyMemory(?pic_start, *buffer, Length) 
  If CreateStreamOnHGlobal_(*buffer, 1, @stream1.ISTREAM) = #S_OK 
    CallFunction(gdiplus, "GdipCreateBitmapFromStream", stream1 , @*image) 
  Else 
    MessageRequester("Error","Problem creating images", #MB_ICONERROR) 
    End 
  EndIf 
It's assuming gdiplusstartup has already been called and you'd replace the CallFunction line with the wrapped version to use it with a wrapper, but that's how to do it. One advantage is you don't need decoders if you do it this way.

Posted: Sat Apr 21, 2007 6:34 pm
by Denis
netmaestro

I think that you are right about no decoders needed by this way :D . It's due to GDI+ function. I did not pay attention before.
I've changed a bit an example from Erix14 (include in the french doc i'm writing on GDI+)

Image in datasection is a png one. No repaint event. Just as it.

Code: Select all

XIncludeFile "..\..\..\gdiplus.pbi"
EnableExplicit

Enumeration
  #MainWindow
EndEnumeration

Define .l
Global *token = Gdiplus_New()
Global *gfx, *image, imageSize.l, hGlobal.l, *GlobalBuffer.l, iImageStream.l, *Buffer.l

Procedure IUnknown_Release(*obj.IUnknown)
  ProcedureReturn *obj\Release()
EndProcedure

If OpenWindow(#MainWindow, 0, 0, 640, 480, "GdiPlus 1.0 - GdipCreateBitmapFromStream", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  
  GdipCreateFromHWND(WindowID(#MainWindow), @*gfx)
  imageSize = ?fin - ?debut
  *Buffer = ?debut
  
  hGlobal = GlobalAlloc_(#GMEM_MOVEABLE | #GMEM_NODISCARD, imageSize)
  If hGlobal
    *GlobalBuffer = GlobalLock_(hGlobal)
    If *GlobalBuffer
      CopyMemory_(*GlobalBuffer, *Buffer, imageSize)
      If CreateStreamOnHGlobal_(hGlobal, #False, @iImageStream) = 0
        ; Récupération de l'image PNG inclus dans DataSection.
        If GdipCreateBitmapFromStream(iImageStream, @*image) = #Ok
          GdipDrawImageI(*gfx, *image, 10, 10)
        EndIf
        GdipDisposeImage(*image)
        IUnknown_Release(iImageStream)
      EndIf
      GlobalUnlock_(*GlobalBuffer)
    EndIf
    GlobalFree_(hGlobal)
  EndIf
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
  
EndIf

GdipDeleteGraphics(*gfx)
GdiplusShutdown(*token)

DataSection
   Debut :
      Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $32000000, $32000000
      Data.l $00000308, $78E12900, $00000083, $4D497407, $04D70745, $190F1115
      Data.l $12FABFAF, $09000000, $73594870, $79080000, $79080000, $97490501
      Data.l $000000CD, $4D416704, $B1000041, $61FC0B8F, $00000005, $544C500C
      Data.l $FFFFFF45, $00000000, $800000FF, $5D6B0900, $0000008A, $414449FC
      Data.l $BDDA7854, $C216EB94, $49830830, $ACEFFEF7, $1A056DCE, $C8ECF32E
      Data.l $819FAB3F, $91E454D0, $40DBAD82, $4FB60203, $8AACE301, $A65881C1
      Data.l $8098C223, $0646849C, $E44AF976, $5071988D, $A064188B, $665A2227
      Data.l $3FD92674, $B6D9AE57, $AB6BD20C, $28208083, $47193996, $07FD648C
      Data.l $5CBA3BB4, $9C1E78CC, $4917CB22, $FF310177, $06003489, $4D2AF118
      Data.l $732215C0, $E809BA18, $78F3E840, $0CBACB01, $846CC811, $64CE83C9
      Data.l $05A2326C, $D2CCA66B, $6C4F9ADA, $E43C81C3, $04163A90, $C59ABF11
      Data.l $189E9862, $CDEEF922, $64E5D334, $A80E50F5, $E432BF39, $E9D807BD
      Data.l $89F768C5, $008FBE99, $5D6D8471, $490BF15F, $4304F109, $213F3DBC
      Data.l $49EC6355, $8BF1F2D8, $E8904E2B, $29574B71, $910E4152, $EDF9DD6E
      Data.l $C881FE64, $EA27907F, $08A83505, $FDA4DE17, $00000003, $4E454900
      Data.b  68, -82, 66, 96, -126
   Fin :
EndDataSection

Posted: Mon Apr 23, 2007 4:28 pm
by BluesInA
thanks for these examples, guys - much appreciated.
mike

Posted: Thu May 17, 2007 9:40 am
by xaby
How to install it exactly?

I get the message that DefineGUID is no function or linked list.

Where I have to put the files, in witch of the PureBasic folders ...? :cry:

Thanks :idea:

Posted: Thu May 17, 2007 11:02 am
by Edwin Knoppert
One ever created this stream function but did not explore the functions itself.
I see these functions being reused all the time.
Frankly you can leave out all the copymemory and such out if you used the stream functions properly.
This would prevent having the data in memory twice.

Posted: Thu May 17, 2007 11:07 am
by Edwin Knoppert
Imo a flaw is the use of:

CopyMemory_(*GlobalBuffer, *Buffer, imageSize)
If CreateStreamOnHGlobal_(hGlobal, #False, @iImageStream) = 0

meaning the memory HANDLE (not pointer) hGlobal is kept locked.
Imo a no-no.