Click here to Skip to main content
15,502,349 members
Home / Discussions / Graphics
   

Graphics

 
QuestionD2D/GDI+ Interop Problem Pin
Member 1171275327-Feb-16 20:21
Member 1171275327-Feb-16 20:21 
I have recently read an article about Direct2D and GDI Interop from MSDN and I just wanted to make an attempt on that.

The problem with my code is that there is no (D2D) red rectangles at the output file but it does not produce any compile-time or runtime errors.

That really makes me frustrated as I have already spent my valuable weekend for that without any progress. Cry | :((

Any help is appreciated.Rose | [Rose]

Ref. article: Direct2D and GDI Interoperability Overview (Windows)[^]

Code block:
C++
#include<d2d1_2.h>
#include<gdiplus.h>
#include<iostream>
#include<wincodec.h>

#pragma comment(lib, "d2d1.lib")
#pragma comment(lib, "GdiPlus.lib")
#pragma comment(lib, "Windowscodecs.lib")

using namespace std;

void main()
{
	HRESULT hr;
	ID2D1Factory* factory;
	ID2D1DCRenderTarget* target;
	ID2D1SolidColorBrush* brush;

	D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &factory);

	// initialize GDI+
	ULONG_PTR token;
	Gdiplus::GdiplusStartup(&token, new Gdiplus::GdiplusStartupInput(), nullptr);


	auto image = new Gdiplus::Image(L"C:\\temp\\test.jpg");

	auto g = Gdiplus::Graphics::FromImage(image);

	auto prop = D2D1_RENDER_TARGET_PROPERTIES{
		D2D1_RENDER_TARGET_TYPE_HARDWARE ,
		D2D1_PIXEL_FORMAT{ DXGI_FORMAT_B8G8R8A8_UNORM , D2D1_ALPHA_MODE_PREMULTIPLIED },
		144.0f,
		144.0f,
		D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE,
		D2D1_FEATURE_LEVEL_DEFAULT
	};


	hr = factory->CreateDCRenderTarget(&prop, &target);

	auto rect = RECT{ 0L,0L,800L, 600L };

	cout << boolalpha << (image == nullptr) << boolalpha << (g == nullptr) << endl;

	HDC deviceContext = g->GetHDC();

	// binds D2D device context to GDI+ device context.
	target->BindDC(deviceContext, &rect);

	// DrawRectangle using D2d
	target->BeginDraw();

	target->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Red, 1.0f), &brush);
	target->DrawRectangle(D2D1_RECT_F{ 5.0f,5.0f,10.0f,10.0f }, brush);
	target->DrawRectangle(D2D1_RECT_F{ 10.0f,10.0f,30.0f,30.0f }, brush);

	hr = target->EndDraw();

	cout << boolalpha << SUCCEEDED(hr) << endl;

	CLSID pngEncoderClsId = { 0x557cf406, 0x1a04, 0x11d3,{ 0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e } };

	// Transcode and save as PNG image file
	image->Save(L"C:\\temp\\output.png", &pngEncoderClsId);

	Gdiplus::GdiplusShutdown(token);
}

AnswerRe: D2D/GDI+ Interop Problem Pin
Richard MacCutchan27-Feb-16 22:11
mveRichard MacCutchan27-Feb-16 22:11 
QuestionDirect3d Game programming error Pin
Member 1226818323-Feb-16 23:12
Member 1226818323-Feb-16 23:12 
SuggestionRe: Direct3d Game programming error Pin
Richard Deeming24-Feb-16 2:05
mveRichard Deeming24-Feb-16 2:05 
GeneralRe: Direct3d Game programming error Pin
Member 1226818324-Feb-16 21:15
Member 1226818324-Feb-16 21:15 
GeneralRe: Direct3d Game programming error Pin
Pete O'Hanlon24-Feb-16 23:03
mvaPete O'Hanlon24-Feb-16 23:03 
GeneralRe: Direct3d Game programming error Pin
Archard25215-Jul-16 1:06
Archard25215-Jul-16 1:06 
GeneralRe: Direct3d Game programming error Pin
Richard MacCutchan24-Feb-16 2:19
mveRichard MacCutchan24-Feb-16 2:19 
AnswerRe: Direct3d Game programming error Pin
Pete O'Hanlon24-Feb-16 3:16
mvaPete O'Hanlon24-Feb-16 3:16 
GeneralRe: Direct3d Game programming error Pin
Member 1226818324-Feb-16 21:17
Member 1226818324-Feb-16 21:17 
GeneralRe: Direct3d Game programming error Pin
Richard MacCutchan24-Feb-16 22:40
mveRichard MacCutchan24-Feb-16 22:40 
GeneralRe: Direct3d Game programming error Pin
Member 1226818325-Feb-16 1:40
Member 1226818325-Feb-16 1:40 
GeneralRe: Direct3d Game programming error Pin
Richard MacCutchan25-Feb-16 2:01
mveRichard MacCutchan25-Feb-16 2:01 
GeneralRe: Direct3d Game programming error Pin
Member 1226818325-Feb-16 4:21
Member 1226818325-Feb-16 4:21 
GeneralRe: Direct3d Game programming error Pin
Richard MacCutchan25-Feb-16 5:18
mveRichard MacCutchan25-Feb-16 5:18 
GeneralRe: Direct3d Game programming error Pin
Member 1226818325-Feb-16 6:11
Member 1226818325-Feb-16 6:11 
GeneralRe: Direct3d Game programming error Pin
Richard MacCutchan25-Feb-16 6:22
mveRichard MacCutchan25-Feb-16 6:22 
GeneralRe: Direct3d Game programming error Pin
Member 1226818326-Feb-16 22:43
Member 1226818326-Feb-16 22:43 
GeneralRe: Direct3d Game programming error Pin
Member 1226818324-Feb-16 21:23
Member 1226818324-Feb-16 21:23 
QuestionWindows 10 / D3D9 Master Adapter Failure Pin
JStrings15-Jan-16 10:29
professionalJStrings15-Jan-16 10:29 
SuggestionRe: Windows 10 / D3D9 Master Adapter Failure Pin
Member 1171275327-Feb-16 21:35
Member 1171275327-Feb-16 21:35 
GeneralRe: Windows 10 / D3D9 Master Adapter Failure Pin
JStrings28-Feb-16 20:19
professionalJStrings28-Feb-16 20:19 
QuestionHow to paint right angle connecting line looks like as visio Pin
BlueOfGlass20-Nov-15 18:38
BlueOfGlass20-Nov-15 18:38 
AnswerRe: How to paint right angle connecting line looks like as visio Pin
Richard MacCutchan20-Nov-15 22:49
mveRichard MacCutchan20-Nov-15 22:49 
Questionhow to use matlab bifurcation HeLP Pin
Member 118227094-Nov-15 1:30
Member 118227094-Nov-15 1:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.