Graphics.DrawImageUnscaled 有什么作用?

问题描述 投票:0回答:1

如果你绘制图像,例如:,那么并不为人所知

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
会做什么?

来自MSDN

另请参阅

.net winforms gdi+ system.drawing
1个回答
8
投票

Graphics.DrawImageUnscaled Method (Image, Int32, Int32)
DrawImage (Image, Int32, Int32)

没有做任何不同的事情

例如

public void DrawImageUnscaled(Image image, int x, int y)
{
    this.DrawImage(image, x, y);
}

然而,采用 HeightWidth 或矩形的方法:

不一样。

这些方法要么忽略高度和宽度,要么使用矩形仅使用顶部和左侧。

我的猜测是

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

© www.soinside.com 2019 - 2024. All rights reserved.