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


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

Если передать методу 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());

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

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