Любой из этих методов должен работать:
PlgBlt
, который "выполняет передачу битового блока битов цветовых данных из указанного прямоугольникав контексте исходного устройства к указанному параллелограмму в контексте целевого устройства ", с координатами повернутого параллелограмма
комбинация SetWorldTransform
, передавая вматрица вращения и нормальное значение BitBlt
.
Обратите внимание, что в обоих случаях преобразование вращения в исходном постоянном токе не должно происходить, только в месте назначения.
Боюсь, я не могу дать вам пример кода прямо сейчас, но некоторое прибегание к поиску действительно показало несколько примеров того, как использовать эти функции для поворота на произвольное количество градусов, которое вы можете изменить на сложный-код до 90 градусов:
- Использование
PlgBlt
(простите здесь язык ... это VB) - Использование
SetWorldTransform
иBitBlt
.Обратите внимание, что если ваш код изменяет преобразование в другом месте (например, любой потомок VCL TGraphicControl
сделает это в своем методе Paint
, и вполне вероятно, что MFC и другие распространенные оболочки WinAPI, вероятно, тоже)вы должны использовать GetWorldTransform
, чтобы сохранить текущее преобразование и применить ваше с ModifyWorldTransform
вместо установки (перезаписи) текущего преобразования. - Пока я искалдля этих примеров я наткнулся на интересный, очень старый вопрос службы поддержки Microsoft, показывающий, как рисовать в повернутую или непрямоугольную область .Я подозреваю, что для ротации этот код не так хорош, как одна из других функций.
Я не уверен, что какой-либо из этих показателей считается быстрым или простым по сравнению с использованием GDI +:)