.NET:Graphics.DrawImageUnscaled做了什么?

Ian*_*oyd 14 .net system.drawing gdi+ winforms

这是不为人所熟知的是,如果你画的图像,例如:

graphics.DrawImage(image, top, left);
Run Code Online (Sandbox Code Playgroud)

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

如果要在不进行任何缩放的情况下绘制图像,则必须明确指定DrawImage图像的大小:

graphics.DrawImage(img, top, left, img.Width, img.Height);
Run Code Online (Sandbox Code Playgroud)

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

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

graphics.DrawImageUnscaled(img, top, left);
Run Code Online (Sandbox Code Playgroud)

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

graphics.DrawImage(img, top, left);
Run Code Online (Sandbox Code Playgroud)

如果你想绘制一个未缩放的图像,你必须继续打电话:

graphics.DrawImage(img, top, left, img.Width, img.Height);
Run Code Online (Sandbox Code Playgroud)

这让我DrawImageUnscaled想到了一个问题:如果不画一幅未缩放的图像怎么办?

来自MSDN

也可以看看

Con*_*rix 7

好吧Graphics.DrawImageUnscaled Method (Image, Int32, Int32)没有做任何不同的事情DrawImage (Image, Int32, Int32)

例如

public void DrawImageUnscaled(Image image, int x, int y)
{
    this.DrawImage(image, x, y);
}
Run Code Online (Sandbox Code Playgroud)

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

我的猜测是DrawImageUnscaled Method (Image, Int32, Int32)由于奇偶校验的原因而存在,并且由于源设备和目标设备中的dpi差异而与缩放无关.