Общее решение: Для каждого пикселя в целевом изображении возьмите пиксель в исходном изображении с координатами целевого пикселя, повернутыми в противоположном направлении.
Улучшение решения: Вращение обычно не дает точных координат пикселей. Получите средневзвешенное значение исходного пикселя с его соседями в соответствии с процентом, в котором он перекрывает их.
Ускоренное решение для двоичных изображений: Преобразование изображения в «серии» последовательных пикселей переднего плана. Затем поверните конечные точки этих линий и нарисуйте их в пункте назначения.
Обычно это приводит к небольшим промежуткам из-за округления целых чисел, поэтому, когда одна или обе конечные точки находятся на расстоянии более 10% от целого числа, исправьте путем рисования ДВУХ линий для одиночной исходной строки, используя целочисленные координаты, округленные вверх и вниз.
Если одна конечная точка находится в пределах 10%, а другая - нет, две линии образуют V-образную форму. Если оба значения отклонены более чем на 10%, две линии образуют форму «X».
Это можно сделать относительно оси X или оси Y. Используйте тот, у которого наименьший угол между осью и углом поворота. (То есть, если угол поворота находится между 45 и -45, используйте ось X.)
Еще более быстрое решение для двоичных изображений: Если фоновых пикселей меньше, чем пикселей переднего плана, заполните место назначения передним планом и следуйте приведенному выше алгоритму с фоновыми пикселями.