我想从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();
答案 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] - 坐标 左上角的部分 要绘制的源图像。
希望这有帮助。