.NET:Graphics.DrawImageUnscaled做什么?
如果您绘制图像,例如:.NET:Graphics.DrawImageUnscaled做什么?,.net,winforms,gdi+,system.drawing,.net,Winforms,Gdi+,System.drawing,如果您绘制图像,例如: graphics.DrawImage(image, top, left); 图像将被缩放。这是因为查看图像的dpi设置(例如photoshop中的72dpi),并缩放图像以匹配目标显示(通常为96dpi) 如果要在不进行任何缩放的情况下绘制图像,必须明确指定图像的大小: graphics.DrawImage(img, top, left, img.Width, img.Height); 我在GDI+编程多年后就知道了这一点。同样的事实也存在于.NET系统中。在GDI+
graphics.DrawImage(image, top, left);
图像将被缩放。这是因为查看图像的dpi设置(例如photoshop中的72dpi),并缩放图像以匹配目标显示(通常为96dpi)
如果要在不进行任何缩放的情况下绘制图像,必须明确指定图像的大小:
graphics.DrawImage(img, top, left, img.Width, img.Height);
我在GDI+编程多年后就知道了这一点。同样的事实也存在于.NET系统中。在GDI+周围绘制
包装器-如果要绘制未缩放的图像,必须强制将其缩放到原始大小
这就是为什么我对在.NET中找到DrawImageUnscaled
方法印象深刻的原因:
graphics.DrawImageUnscaled(img, top, left);
除了图像仍在缩放之外;使其与以下内容相同:
graphics.DrawImage(img, top, left);
如果要绘制未缩放的图像,则必须继续调用:
graphics.DrawImage(img, top, left, img.Width, img.Height);
这就引出了我的问题:DrawImageUnscaled
如果不绘制未缩放的图像,会有什么影响
来自MSDN
- 在坐标对指定的位置,使用指定图像的原始物理大小绘制该图像
- 在坐标对指定的位置使用其原始物理大小绘制指定的图像
- 在指定位置以指定大小绘制指定图像
Graphics.DrawImageUnscaled方法(Image,Int32,Int32)
与DrawImage(Image,Int32,Int32)
e、 g
但是,采用高度、宽度或矩形的方法是不同的。这些方法要么忽略高度和宽度,要么仅使用矩形的顶部和左侧
我猜是
DrawImageUnscaled方法(Image,Int32,Int32)
的存在是出于奇偶校验的原因,与缩放无关,因为源设备和目标设备的dpi不同。@LarsTech根据该答案:DrawImage
也会缩放图像-除非您强制它绘制的大小与源图像的大小相同。因此,“使用DrawImage方法,而不是使用原始像素大小绘制图像”的说法是误导性的。有人可能会认为,DrawImage
以原始像素大小绘制图像。这里提到的DrawImageUnscaled相当于BitBlt,DrawImageUnscaled相当于ScaleBlt,但我猜他指的是StretchBlt。另请参见MSDN。如果您想在不进行任何缩放的情况下绘制图像,必须显式地为DrawImage指定图像的大小-不是true!。为了避免与dpi相关的缩放,只需在绘制之前将图像的dpi调整到当前屏幕dpi即可!
public void DrawImageUnscaled(Image image, int x, int y)
{
this.DrawImage(image, x, y);
}