Я изучал эту же проблему последние пару недель.
Насколько я могу судить, не существует какой-либо определенной документации по этому поведению от Microsoft.
Тем не менее, я сам провел несколько тестов, чтобы попытаться установить степень, в которой StretchBlt можно доверять для последовательной работы в отношении увеличения и уменьшения изображения в полутоновом режиме.* Мои выводы:
1) StretchBlt обеспечивает адекватное качество увеличенных и уменьшенных изображений.Это может быть прикосновение ниже качества Photoshop, но, вероятно, подходит для большинства практических целей.
2) Кажется, оно зависит от аппаратного ускорения, когда оно доступно.Я не смог подтвердить это, но у меня есть небольшой страх, что это может привести к различным результатам на разных типах оборудования.Однако на 5 или 6 различных системах, на которых я его пробовал, старых и новых, производительность была стабильной и быстрой.
3) Если вы используете вызов на 16-битном цветном устройстве, илиниже StretchBlt автоматически поменяет ваше изображение.Если вы запустите его на 24-битном цветном устройстве, оно не будет колебаться.
4) Если вы используете его для масштабирования небольших изображений (размером менее 150x150 пикселей), он будет случайным образом возвращаться к интерполяции ближайшего соседа.Это можно исправить в вашем собственном программном обеспечении, добавив растровое изображение перед масштабированием, выполнив для него StretchBlt, а затем удалив заполнение.Вроде хак, но это работает.