------------------
Patrice Terrier
mailto

www.zapsolution.com
Addons: WinLIFT (Skin Engine), GDI+ helper (Graphic package), Artwork (logo creation)
%GMEM_MOVEABLE = &H2 %GMEM_NODISCARD = &H20 TYPE GdiplusStartupInput GdiplusVersion AS LONG ' Must be 1 DebugEventCallback AS LONG ' Ignored on free builds SuppressBackgroundThread AS LONG ' FALSE unless you're prepared to call ' the hook/unhook functions properly SuppressExternalCodecs AS LONG ' FALSE unless you want GDI+ only to use ' its internal image codecs. END TYPE DECLARE SUB MoveMemory LIB "KERNEL32.DLL" ALIAS "RtlMoveMemory" (pDestination AS ANY, pSource AS ANY, BYVAL cbLength AS LONG) SUB CopyMemory (BYVAL pDestination AS DWORD, BYVAL pSource AS DWORD, BYVAL cbLength AS LONG) MoveMemory BYVAL pDestination, BYVAL pSource, cbLength END SUB DECLARE FUNCTION GlobalAlloc LIB "KERNEL32.DLL" ALIAS "GlobalAlloc" (BYVAL wFlags AS DWORD, BYVAL dwBytes AS DWORD) AS LONG DECLARE FUNCTION GlobalFree LIB "KERNEL32.DLL" ALIAS "GlobalFree" (BYVAL hMem AS DWORD) AS LONG DECLARE FUNCTION GlobalLock LIB "KERNEL32.DLL" ALIAS "GlobalLock" (BYVAL hMem AS DWORD) AS DWORD DECLARE FUNCTION GlobalUnlock LIB "KERNEL32.DLL" ALIAS "GlobalUnlock" (BYVAL hMem AS DWORD) AS LONG DECLARE FUNCTION GdipCreateBitmapFromStream LIB "gdiplus.dll" ALIAS "GdipCreateBitmapFromStream" (Byval pstream as Dword, nBitmap As Long) AS LONG DECLARE FUNCTION GdiplusStartup LIB "gdiplus.dll" ALIAS "GdiplusStartup" (token&, inputbuf AS GdiplusStartupInput, OPTIONAL BYVAL outputbuf&) AS LONG DECLARE FUNCTION GdiplusShutdown LIB "gdiplus.dll" ALIAS "GdiplusShutdown" (BYVAL token&) AS LONG DECLARE FUNCTION GdipLoadImageFromStream LIB "gdiplus.dll" ALIAS "GdipLoadImageFromStream" (BYVAL stream AS DWORD, nImage&) AS LONG DECLARE FUNCTION CreateStreamOnHGlobal LIB "ole32.dll" ALIAS "CreateStreamOnHGlobal" (BYVAL hGlobal AS DWORD, BYVAL fDeleteOnRelease AS DWORD, pstm AS DWORD) AS LONG FUNCTION GdipStart() EXPORT AS LONG DIM GpInput AS GdiplusStartupInput GpInput.GdiplusVersion = 1 IF GdiplusStartup(hGDIplus&, GpInput) = 0 THEN FUNCTION = hGDIplus& END FUNCTION SUB GdipEnd(BYVAL hGDIplus&) IF hGDIplus& THEN CALL GdiplusShutdown(hGDIplus&): hGDIplus& = 0 END SUB FUNCTION IUnknown_Release (BYVAL pthis AS DWORD PTR) AS DWORD LOCAL DWRESULT AS DWORD IF pthis THEN CALL DWORD @@pthis[2] USING IUnknown_Release(pthis) TO DWRESULT FUNCTION = DWRESULT END IF END FUNCTION FUNCTION PBMAIN() DIM iImageStream AS DWORD, hImage AS LONG, hGDIplus AS LONG DIM imageSize AS LONG, sBuffer AS STRING, hGlobal AS DWORD, pGlobalBuffer AS DWORD hGDIplus = GdipStart sFilename$ = "genus.jpg" hFile& = FreeFile Open sFilename$ For Binary Access Read Shared As #hFile& imageSize = LOF(hFile&) sBuffer = SPACE$(imageSize) Get #hFile&, , sBuffer Close #hFile& hGlobal = GlobalAlloc(%GMEM_MOVEABLE OR %GMEM_NODISCARD, imageSize) IF hGlobal THEN pGlobalBuffer = GlobalLock(hGlobal) IF pGlobalBuffer THEN CopyMemory pGlobalBuffer, STRPTR(sBuffer), imageSize IF CreateStreamOnHGlobal(hGlobal, BYVAL 0&, iImageStream) = 0 THEN Ret& = GdipCreateBitmapFromStream(iImageStream, hImage) IF Ret& THEN MSGBOX "Couldn't Load Image" + str$(Ret&) ' %GpStatusInvalidParameter = 2 ELSE MSGBOX "It's good" END IF CALL IUnknown_Release(iImageStream) END IF GlobalUnlock pGlobalBuffer END IF GlobalFree hGlobal END IF CALL GdipEnd(hGDIplus) END FUNCTION
TYPE GdiplusStartupInput GdiplusVersion AS LONG ' Must be 1 DebugEventCallback AS LONG ' Ignored on free builds SuppressBackgroundThread AS LONG ' FALSE unless you're prepared to call ' the hook/unhook functions properly SuppressExternalCodecs AS LONG ' FALSE unless you want GDI+ only to use ' its internal image codecs. END TYPE DECLARE FUNCTION GdiplusStartup LIB "gdiplus.dll" ALIAS "GdiplusStartup" (token&, inputbuf AS GdiplusStartupInput, OPTIONAL BYVAL outputbuf&) AS LONG DECLARE FUNCTION GdiplusShutdown LIB "gdiplus.dll" ALIAS "GdiplusShutdown" (BYVAL token&) AS LONG DECLARE FUNCTION GdipLoadImageFromStream LIB "gdiplus.dll" ALIAS "GdipLoadImageFromStream" (BYVAL stream AS DWORD, nImage&) AS LONG DECLARE FUNCTION CreateStreamOnHGlobal LIB "ole32.dll" ALIAS "CreateStreamOnHGlobal" (BYVAL hGlobal AS DWORD, BYVAL fDeleteOnRelease AS DWORD, pstm AS DWORD) AS LONG FUNCTION GdipStart() EXPORT AS LONG DIM GpInput AS GdiplusStartupInput GpInput.GdiplusVersion = 1 IF GdiplusStartup(hGDIplus&, GpInput) = 0 THEN FUNCTION = hGDIplus& END FUNCTION SUB GdipEnd(BYVAL hGDIplus&) IF hGDIplus& THEN CALL GdiplusShutdown(hGDIplus&): hGDIplus& = 0 END SUB FUNCTION IUnknown_Release (BYVAL pthis AS DWORD PTR) AS DWORD LOCAL DWRESULT AS DWORD IF pthis THEN CALL DWORD @@pthis[2] USING IUnknown_Release(pthis) TO DWRESULT FUNCTION = DWRESULT END IF END FUNCTION FUNCTION PBMAIN() DIM IStream AS DWORD DIM hImage AS LONG, hGDIplus AS LONG hGDIplus = GdipStart sFilename$ = "genus.jpg" hFile& = FreeFile Open sFilename$ For Binary Access Read Shared As #hFile& ReDim m_ImageData(0 To LOF(hFile&) - 1) AS BYTE Get #hFile&, , m_ImageData(0) Close #hFile& If CreateStreamOnHGlobal(m_ImageData(0), BYVAL 0&, IStream) = 0 Then Ret& = GdipLoadImageFromStream([b]IStream[/b], hImage) IF Ret& Then MSGBOX "Couldn't Load Image" + str$(Ret&) ' %GpStatusInvalidParameter = 2 else MSGBOX "It's good" End If CALL IUnknown_Release(IStream) End If CALL GdipEnd(hGDIplus) END FUNCTION
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Leave a comment: