А если не использовать всякие SetViewportExtEx, а для рисования воспользоваться функцией StretchDIBits — при растяжении картинки используются некоторые методы интерполяции (может быть даже кубическая). Можно так же руками обрабатывать, т. е. создать bitmap нужного размера и по определенному алгоритму Ваше изображение растянуть.
А вообще, что вы понимаете под качеством?