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想到了一个问题:如果不画一幅未缩放的图像怎么办?
Graphics.DrawImageUnscaled方法(Image,Int32,Int32)
在坐标对指定的位置使用其原始物理大小绘制指定的图像.
Graphics.DrawImage方法(Image,Int32,Int32)
使用其原始物理大小在坐标对指定的位置绘制指定的图像.
Graphics.DrawImage方法(Image,Int32,Int32,Int32,Int32)
在指定位置以指定大小绘制指定的Image.
好吧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差异而与缩放无关.