Поделиться через


Повышение производительности путем предотвращения автоматического масштабирования

Если передать только левый верхний угол изображения методу DrawImage, Windows GDI+ может масштабировать изображение, что приведет к снижению производительности.

Следующий вызов метода DrawImage указывает левый верхний угол (50, 30), но не указывает целевой прямоугольник:

graphics.DrawImage(&image, 50, 30);  // upper-left corner at (50, 30)

Хотя это самая простая версия метода DrawImage с точки зрения количества обязательных аргументов, это не обязательно самый эффективный метод. Если количество точек на дюйм на текущем устройстве отображения отличается от количества точек на дюйм на устройстве, где было создано изображение, GDI+ масштабирует изображение таким образом, чтобы его физический размер на текущем устройстве дисплея был максимально близок к его физическому размеру на устройстве, где он был создан.

Если вы хотите предотвратить такое масштабирование, передайте ширину и высоту прямоугольника назначения в метод DrawImage. В следующем примере рисуется один и тот же образ дважды. В первом случае ширина и высота прямоугольника назначения не указаны, а изображение автоматически масштабируется. Во втором случае ширина и высота (измеряемая в пикселях) прямоугольника назначения указываются так же, как ширина и высота исходного изображения.

Image image(L"Texture.jpg");
graphics.DrawImage(&image, 10, 10);
graphics.DrawImage(&image, 120, 10, image.GetWidth(), image.GetHeight());

На следующем рисунке показан изображение, отрисованное дважды.

снимок экрана окна, содержащего две версии одного изображения в разных масштабах