.NET:Graphics.DrawImageUnscaled做了什么?

时间:2011-11-09 21:31:39

标签: .net winforms gdi+ system.drawing

not well known,如果您绘制图像,例如:

graphics.DrawImage(image, top, left);

图像将被缩放。这是因为DrawImage查看图像的dpi设置(例如来自photoshop的72dpi),并缩放图像以匹配目标显示(通常为96dpi)。

如果您想要绘制没有任何缩放的图像,您必须明确给出DrawImage图像的大小:

graphics.DrawImage(img, top, left, img.Width, img.Height);

我从GDI +的多年编程中了解到这一点。围绕GDI +的.NET System.Drawing包装器中存在相同的事实 - 如果要绘制未缩放的图像,则必须强制它缩放到原始大小。

这就是为什么我在.NET中找到DrawImageUnscaled方法给我留下了深刻的印象:

graphics.DrawImageUnscaled(img, top, left);

除了图像仍然缩放;使其与:

相同
graphics.DrawImage(img, top, left);

如果您想要绘制未缩放的图像,则必须继续调用:

graphics.DrawImage(img, top, left, img.Width, img.Height);

这让我想到了一个问题:DrawImageUnscaled如果不绘制未缩放的图像会是什么?

来自MSDN

另见

1 个答案:

答案 0 :(得分:7)

Graphics.DrawImageUnscaled Method (Image, Int32, Int32)与[{1}}

不同

e.g。

DrawImage (Image, Int32, Int32)

然而,采用高度,宽度或矩形的方法是不同的。这些方法要么忽略高度和宽度要么使用矩形只使用顶部和左边。

我的猜测是public void DrawImageUnscaled(Image image, int x, int y) { this.DrawImage(image, x, y); } 出于奇偶校验的原因,并且由于源设备和目标设备的dpi差异而与缩放无关。