.NET: Что делает Graphics.DrawImageUnscaled? - PullRequest
14 голосов
/ 10 ноября 2011

не очень хорошо известно , что если вы рисуете изображение, например:

graphics.DrawImage(image, top, left);

, изображение будет масштабировано.Это связано с тем, что DrawImage просматривает настройку dpi изображения (например, 72 dpi из фотошопа) и масштабирует изображение в соответствии с отображением назначения (обычно 96 dpi).

Если вы хотите нарисовать изображение без масштабирования, вы должны явно указать DrawImage размер изображения:

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

Я знал это по многим годам программирования в GDI +.Тот же факт существует в оболочках .NET System.Drawing вокруг GDI + - если вы хотите нарисовать немасштабированное изображение, вы должны заставить его масштабироваться до исходного размера.

Вот почему я был впечатлен тем, что нашел метод DrawImageUnscaled в .NET:

graphics.DrawImageUnscaled(img, top, left);

За исключением того, что изображение все еще масштабируется;сделав его идентичным:

graphics.DrawImage(img, top, left);

, и если вы хотите нарисовать немасштабированное изображение, вы должны продолжать звонить:

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

Что подводит меня к моему вопросу: что означает DrawImageUnscaledесли не нарисовать немасштабированное изображение?

Из MSDN

См. также

1 Ответ

7 голосов
/ 10 ноября 2011

Ну 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 висходное и целевое устройство.

...