Hi all,

I need some help from you: I try to render an SVG image on the screen (with alpha channel). The problem is, when I try to draw the image on the screen, I see absolutely nothing.
First of all, my SVG image is loaded correctly, and the ATL CImage from the below code, contains a correct image. The problem start when I try to use Gdiplus + alpha channel.
For instance, if I use PixelFormat24bppRGB instead of PixelFormat32bppARGB, the image is drawn correctly, but alpha channel is not preserved - a black halo is shown around my image.
Do you see any problem in my code?

PS: I use Win7, 32 bit + Visual Studio 2013 Ultimate.

Many thanks!

Code:
void CAppView::OnDraw(CDC* pDC)
{

	int width = 600, height = 600;

	GError* pError = NULL;

	rsvg_init();
	g_my_svg = rsvg_handle_new_from_file("d:\\myImage.svg", &pError);
	rsvg_handle_get_dimensions(g_my_svg, &g_dimension);


	cairo_surface_t *surface = cairo_win32_surface_create_with_dib(CAIRO_FORMAT_ARGB32, width, height);
	cairo_t* cr = cairo_create(surface);

	rsvg_handle_render_cairo(g_my_svg, cr);

	HDC srcHDC = cairo_win32_surface_get_dc(surface);

	// Create ATL CImage, then, copy the content of srcHDC in the CImage HDC
	CImage image;
	image.Create(width, height, 32);

	HDC imageHDC = image.GetDC();

	TransparentBlt(imageHDC, 0, 0, width, height, srcHDC, 0, 0, width, height, RGB(0, 0, 0));


	// Initialize Gdiplus
	Gdiplus::GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken;
	Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

// Problems starts from this point.

	// Create a Gdiplus bitmap, and copy the content of CImage in bitmap, then write the bitmap on the screen.
	Gdiplus::Bitmap bmp(image.GetWidth(), image.GetHeight(), image.GetPitch(), PixelFormat32bppARGB, static_cast<BYTE*>(image.GetBits()));
	Gdiplus::Graphics graphics(pDC->GetSafeHdc());
	graphics.DrawImage(&bmp, Gdiplus::Rect(0, 0, width, height));



	Gdiplus::GdiplusShutdown(gdiplusToken);
	image.ReleaseDC();
	image.Destroy();
	cairo_surface_flush(surface);
	cairo_destroy(cr);
	cairo_surface_destroy(surface);
}