2011-02-18 96 views
0

我想粘贴一个从src到dest的(x,y,w,h)子矩形,以便(x,y)源像素显示为(0,0)dest像素。我很难决定哪些gazillion超载做到这一点。现在我的代码看起来是这样的,这显然是行不通的:我应该使用哪个Gdiplus :: Graphics :: DrawImage函数?

auto_ptr<Gdiplus::Graphics> g(Gdiplus::Graphics::FromHDC(pDC->GetSafeHdc())); 
g->DrawImage(png, r.top, r.bottom, r.Width(), r.Height()); 
g->Flush(); 

因为(X,Y)源像素显示为(X,Y)目标像素,它不工作,而我想它显示为(0,0)目标像素。源矩形和目标矩形应具有相同的大小,但偏移量不同,而不是相同的偏移量。

[编辑] Nevermind,我发现我需要的重载函数。打开我不得不添加的是前面的目标(x,y)偏移量和最后的UnitPixel。

auto_ptr<Gdiplus::Graphics> g(Gdiplus::Graphics::FromHDC(pDC->GetSafeHdc())); 
g->DrawImage(png, 0, 0, r.left, r.top, r.Width(), r.Height(), Gdiplus::UnitPixel); 
g->Flush(); 
+0

我不确定gdiplus,但在类似的情况下,我想你需要通过PNG的宽度和高度,而不是r的。还要确保图像符合可用的矩形。 – sinek 2011-02-18 15:38:47

+0

r有宽度/高度。它是在我粘贴的代码之前完成的。 – sashoalm 2011-02-18 15:40:53

回答

0

任何人都可以工作,他们工作同样好。他们大多只是彼此的别名。一个我猜你正在使用会this one其中指出:

X [中] REAL实数,指定 将在 左上角 角落目标矩形的x坐标,其画图片。

Y [IN] REAL实数,指定 所述 左上 角目标矩形的y坐标,其绘制图像。

尝试设置x和y的值改为0,因此调用变为:

auto_ptr<Gdiplus::Graphics> g(Gdiplus::Graphics::FromHDC(pDC->GetSafeHdc())); 
g->DrawImage(png, 0, 0, r.Width(), r.Height()); 
g->Flush(); 

以外,你将有更具体,什么“不工作” 。它画错了吗?它没有被绘制? png是否正确加载? 如果没有绘制任何东西,我建议你检查DrawImage的返回值(这是一个Status),它应该指向正确的方向。


编辑

好了,如果你不希望它被映射为SRC DO(0,0)到dest(0,0),我想你可以使用this one代替。这将让你决定

SRC | [中] REAL实数[x和y]认为 指定[X | Y]的 源图像部分的 左上角的 - 协调被画下来。

希望这会有所帮助。