如果你绘制图像,例如:,那么并不为人所知
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
会做什么?
Graphics.DrawImageUnscaled 方法(Image、Int32、Int32)
在坐标对指定的位置使用其原始物理尺寸绘制指定图像。
Graphics.DrawImage方法(Image、Int32、Int32)
在坐标对指定的位置,使用其原始物理尺寸绘制指定图像。
Graphics.DrawImage方法(Image、Int32、Int32、Int32、Int32)
在指定位置以指定尺寸绘制指定图像。
嗯
Graphics.DrawImageUnscaled Method (Image, Int32, Int32)
与 DrawImage (Image, Int32, Int32)
没有做任何不同的事情
例如
public void DrawImageUnscaled(Image image, int x, int y)
{
this.DrawImage(image, x, y);
}
然而,采用 Height、Width 或矩形的方法:
image
,int x
,int y
)image
,intx
,inty
,intwidth
,intheight
)image
,点point
)image
,矩形rect
)不一样。
这些方法要么忽略高度和宽度,要么使用矩形仅使用顶部和左侧。
我的猜测是
DrawImageUnscaled Method (Image, Int32, Int32)
的存在是出于奇偶校验的原因,并且与由于源设备和目标设备的 dpi 差异而导致的缩放无关。