В любом из этих методов должен работать:
PlgBlt
, который «выполняет передачу битового блока битов данных цвета из указанного прямоугольника в контексте устройства-источника к указанному параллелограмма в пункте назначения контекст устройства "с координатами повернутого параллелограмма
Комбинация SetWorldTransform
, проходящая по матрице вращений и нормальная BitBlt
.
Обратите внимание, что в источнике DC не должно быть никакого преобразования вращения, а только адресата.
Я боюсь, что сейчас я не могу дать вам пример кода, но некоторые поисковые запросы принесли некоторые примеры того, как использовать эти функции для поворота произвольного количества градусов, которые вы могли бы изменить на жесткий -код до 90 градусов:
- Using
PlgBlt
(извините язык здесь ... это VB)
- Using
SetWorldTransform
and BitBlt
. Обратите внимание, что если ваш код изменяет преобразование в другом месте (например, любой потоковый потомок VCL TGraphicControl
будет иметь это в своем методе Paint
, и, вероятно, вероятно, что и MFC и другие обычные обертки WinAPI), вы должны использовать GetWorldTransform
, чтобы сохранить текущее преобразование и примените свой код с помощью ModifyWorldTransform
вместо того, чтобы устанавливать (переписывать) текущее преобразование.
- Пока я искал эти примеры, я наткнулся на интересный, очень старый Microsoft Support question showing how to draw to a rotated or non-rectangular area. Я подозреваю, что для вращения этот код не так хорош, как одна из других функций.
Я не уверен, что любой из них считается быстрым и легким по сравнению с использованием GDI + :)
Спасибо за ответ! Я закончил тем самым трудным путем, получив растровые данные, повернув его и создав новое растровое изображение. –