Dot-Net

.NET:Graphics.DrawImageUnscaled 有什麼作用?

  • January 26, 2022

眾所周知,如果您繪製圖像,例如

graphics.DrawImage(image, top, left);

圖像將被縮放。這是因為DrawImage查看圖像的 dpi 設置(例如 photoshop 中的 72dpi),並縮放圖像以匹配目標顯示(通常為 96dpi)。

如果要在不進行任何縮放的情況下繪製圖像,則必須明確給出DrawImage圖像的大小:

graphics.DrawImage(img, top, left, img.Width, img.Height);

我從多年的 GDI+ 程式中知道這一點。同樣的事實存在於System.Drawing圍繞 GDI+ 的 .NET 包裝器中——如果你想繪製一個未縮放的圖像,你必須強制它縮放到原始大小。

DrawImageUnscaled這就是為什麼我對在 .NET中找到一種方法印象深刻的原因:

graphics.DrawImageUnscaled(img, top, left);

除了圖像仍然被縮放;使其等同於:

graphics.DrawImage(img, top, left);

如果要繪製未縮放的圖像,則必須繼續呼叫:

graphics.DrawImage(img, top, left, img.Width, img.Height);

這讓我想到了我的問題:DrawImageUnscaled如果不繪製未縮放的圖像怎麼辦?

來自 MSDN

在座標對指定的位置使用其原始物理尺寸繪製指定圖像。

在座標對指定的位置使用其原始物理尺寸繪製指定圖像。

在指定位置以指定大小繪製指定 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);
}

然而,採用高度、寬度或矩形的方法是不同的。這些方法要麼忽略高度和寬度,要麼只使用矩形的頂部和左側。

我的猜測是DrawImageUnscaled Method (Image, Int32, Int32)由於奇偶校驗原因而存在,並且由於源設備和目標設備的 dpi 差異而與縮放無關。

引用自:https://stackoverflow.com/questions/8072003