我应该使用哪个Gdiplus :: Graphics :: DrawImage函数?
问题描述:
我想粘贴一个从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();
答
任何人都可以工作,他们工作同样好。他们大多只是彼此的别名。一个我猜你正在使用会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]的 源图像部分的 左上角的 - 协调被画下来。
希望这会有所帮助。
我不确定gdiplus,但在类似的情况下,我想你需要通过PNG的宽度和高度,而不是r的。还要确保图像符合可用的矩形。 – sinek 2011-02-18 15:38:47
r有宽度/高度。它是在我粘贴的代码之前完成的。 – sashoalm 2011-02-18 15:40:53