Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET:Graphics.DrawImageUnscaled做什么?_.net_Winforms_Gdi+_System.drawing - Fatal编程技术网

.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);
}