Подтвердить что ты не робот

.NET: Что делает Graphics.DrawImageUnscaled?

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

graphics.DrawImage(image, top, left);

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

Если вы хотите нарисовать изображение без какого-либо масштабирования, вы должны явно указать 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

См. также

4b9b3361

Ответ 1

Ну Graphics.DrawImageUnscaled Method (Image, Int32, Int32) не делает ничего, кроме DrawImage (Image, Int32, Int32)

например.

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

Однако методы, которые принимают в Height, Width или прямоугольник, различны. Эти методы игнорируют высоту и ширину или прямоугольник используют только верхний и левый.

Я предполагаю, что DrawImageUnscaled Method (Image, Int32, Int32) существует по соображениям четности и не имеет никакого отношения к масштабированию из-за разницы dpi в исходном и целевом устройствах.