我应该使用哪个Gdiplus :: Graphics :: DrawImage函数?

时间:2011-02-18 15:35:24

标签: c++ gdi+

我想从src到dest粘贴一个(x,y,w,h)子矩形,以便(x,y)源像素显示为(0,0)dest像素。我很难确定哪些重载过载会造成这种情况。现在我的代码看起来像这样,显然不起作用:

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)目标像素。源矩形和目标矩形应具有相同的大小但不同的偏移量,而不是相同的偏移量。

[编辑] 没关系,我找到了我需要的重载功能。转而我必须添加的是前面的目标(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();

1 个答案:

答案 0 :(得分:0)

任何人都会工作,他们同样有效。它们大多只是彼此的别名。我猜你正在使用的那个是this one,它表明:

  

x [in] 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(0,0)到dest(0,0),我猜你可以使用this one代替。这将让你决定

  

src [x | y] [in] REAL实数   指定的[x | y] - 坐标   左上角的部分   要绘制的源图像。

希望这有帮助。

相关问题