//----------------------------------------------------------------------------- IPlatformBitmap* IPlatformBitmap::createFromPath (UTF8StringPtr absolutePath) { UTF8StringHelper path (absolutePath); IStream* stream = 0; if (SUCCEEDED (SHCreateStreamOnFileEx (path, STGM_READ|STGM_SHARE_DENY_WRITE, 0, false, 0, &stream))) { #if VSTGUI_DIRECT2D_SUPPORT if (getD2DFactory ()) { D2DBitmap* result = new D2DBitmap (); if (result->loadFromStream (stream)) { stream->Release (); return result; } stream->Release (); result->forget (); return 0; } #endif GdiplusBitmap* bitmap = new GdiplusBitmap (); if (bitmap->loadFromStream (stream)) { stream->Release (); return bitmap; } bitmap->forget (); stream->Release (); } return 0; }
//----------------------------------------------------------------------------- COffscreenContext* Win32Frame::createOffscreenContext (CCoord width, CCoord height) { #if VSTGUI_DIRECT2D_SUPPORT if (getD2DFactory ()) { D2DBitmap* bitmap = new D2DBitmap (CPoint (width, height)); D2DDrawContext* context = new D2DDrawContext (bitmap); bitmap->forget (); return context; } #endif GdiplusBitmap* bitmap = new GdiplusBitmap (CPoint (width, height)); GdiplusDrawContext* context = new GdiplusDrawContext (bitmap); bitmap->forget (); return context; }
//----------------------------------------------------------------------------- IPlatformBitmap* IPlatformBitmap::createFromMemory (const void* ptr, uint32_t memSize) { #ifdef __GNUC__ typedef IStream* (*SHCreateMemStreamProc) (const BYTE* pInit, UINT cbInit); HMODULE shlwDll = LoadLibraryA ("shlwapi.dll"); SHCreateMemStreamProc proc = reinterpret_cast<SHCreateMemStreamProc> (GetProcAddress (shlwDll, MAKEINTRESOURCEA (12))); IStream* stream = proc (static_cast<const BYTE*> (ptr), memSize); #else IStream* stream = SHCreateMemStream ((const BYTE*)ptr, memSize); #endif if (stream) { #if VSTGUI_DIRECT2D_SUPPORT if (getD2DFactory ()) { D2DBitmap* result = new D2DBitmap (); if (result->loadFromStream (stream)) { stream->Release (); return result; } stream->Release (); result->forget (); return 0; } #endif GdiplusBitmap* bitmap = new GdiplusBitmap (); if (bitmap->loadFromStream (stream)) { stream->Release (); return bitmap; } bitmap->forget (); stream->Release (); } #ifdef __GNUC__ FreeLibrary (shlwDll); #endif return 0; }