Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <WindowsX.h>
- #include <wincodec.h>
- #include <d2d1.h>
- #pragma comment (lib, "d2d1.lib")
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
- HRESULT LoadBitmapFromFile(ID2D1RenderTarget *pRenderTarget, IWICImagingFactory *pIWICFactory, PCWSTR uri, UINT destinationWidth, UINT destinationHeight, ID2D1Bitmap **ppBitmap);
- template<class Interface> inline void SafeRelease(Interface **ppInterfaceToRelease);
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- HWND hWnd;
- WNDCLASSEX wc;
- ZeroMemory(&wc, sizeof(WNDCLASSEX));
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
- wc.lpszClassName = "BaseDirect2D";
- RegisterClassEx(&wc);
- hWnd = CreateWindowEx(NULL, "BaseDirect2D","BaseDirect2D", WS_OVERLAPPEDWINDOW, 300, 300, 500, 400, NULL, NULL, hInstance, NULL);
- //Create a ID2D1Factory
- ID2D1Factory *pD2DFactory = NULL;
- HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);
- //Create a WICFactory
- IWICImagingFactory *pWICFactory = NULL;
- if(SUCCEEDED(hr))
- {
- hr = CoCreateInstance(CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pWICFactory));
- }
- //Create a ID2D1HwndRenderTarget
- RECT rc;
- GetClientRect(hWnd, &rc);
- ID2D1HwndRenderTarget* pRT = NULL;
- hr = pD2DFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(), D2D1::HwndRenderTargetProperties(hWnd, D2D1::SizeU(rc.right - rc.left, rc.bottom-rc.top)), &pRT);
- //Create a ID2D1Bitmap
- ID2D1Bitmap *myBitmap = NULL;
- hr = LoadBitmapFromFile(pRT, pWICFactory, L".\\biglokeseal_paint.png", 0, 0, &myBitmap);
- ShowWindow(hWnd, nCmdShow);
- MSG msg;
- while(TRUE)
- {
- while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- if(msg.message == WM_QUIT) break;
- pRT->BeginDraw();
- pRT->Clear(D2D1::ColorF(D2D1::ColorF::Black));
- pRT->DrawBitmap(myBitmap, D2D1::RectF(0.f, 0.f, 50.f, 50.f), 1.0f, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, D2D1::RectF(0.f, 0.f, 50.f, 50.f));
- hr = pRT->EndDraw();
- }
- SafeRelease(&pRT);
- SafeRelease(&pD2DFactory);
- return msg.wParam;
- }
- HRESULT LoadBitmapFromFile(ID2D1RenderTarget *pRenderTarget, IWICImagingFactory *pIWICFactory, PCWSTR uri, UINT destinationWidth, UINT destinationHeight, ID2D1Bitmap **ppBitmap)
- {
- IWICBitmapDecoder *pDecoder = NULL;
- IWICBitmapFrameDecode *pSource = NULL;
- IWICStream *pStream = NULL;
- IWICFormatConverter *pConverter = NULL;
- IWICBitmapScaler *pScaler = NULL;
- HRSRC imageResHandle = NULL;
- HGLOBAL imageResDataHandle = NULL;
- void *pImageFile = NULL;
- DWORD imageFileSize = 0;
- HRESULT hr = pIWICFactory->CreateDecoderFromFilename(uri, NULL, GENERIC_READ, WICDecodeMetadataCacheOnLoad, &pDecoder);
- if(SUCCEEDED(hr))
- {
- hr = pDecoder->GetFrame(0, &pSource);
- }
- if(SUCCEEDED(hr))
- {
- hr = pIWICFactory->CreateFormatConverter(&pConverter);
- }
- if(SUCCEEDED(hr))
- {
- hr = pConverter->Initialize(pSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.f, WICBitmapPaletteTypeMedianCut);
- }
- if(SUCCEEDED(hr))
- {
- hr = pRenderTarget->CreateBitmapFromWicBitmap(pConverter, NULL, ppBitmap);
- }
- SafeRelease(&pDecoder);
- SafeRelease(&pSource);
- SafeRelease(&pStream);
- SafeRelease(&pConverter);
- SafeRelease(&pScaler);
- return hr;
- }
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- LRESULT result = 0;
- switch(message)
- {
- case WM_DESTROY:
- PostQuitMessage(0);
- result = 0;
- break;
- default:
- result = DefWindowProc(hWnd, message, wParam, lParam);
- }
- return result;
- }
- template<class Interface> inline void SafeRelease(Interface **ppInterfaceToRelease)
- {
- if (*ppInterfaceToRelease != NULL)
- {
- (*ppInterfaceToRelease)->Release();
- (*ppInterfaceToRelease) = NULL;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement