.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
-
Метод Graphics.DrawImageUnscaled(изображение, Int32, Int32)
Рисует указанное изображение с использованием его исходного физического размера в месте, заданном координатной парой.
-
Метод Graphics.DrawImage(изображение, Int32, Int32)
Рисует указанное изображение, используя его оригинальный физический размер, в местоположении, заданном координатной парой.
-
Метод Graphics.DrawImage(изображение, Int32, Int32, Int32, Int32)
Рисует указанное изображение в указанном месте и с указанным размером.
См. также
Ответы
Ответ 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 в исходном и целевом устройствах.