Справедливости ради стоит отметить, что размер результирующей картинки будет больше исходной и в ней будут непронумерованные пиксели, то только по краям (прямоугольник, в который вписан повернутый прямоугольник).
Существует алгоритм Оуэна и Македона.
В офтопе скрины страничек, где упоминается этот алгоритм.
(Оффтоп)
Как я понимаю, этот алгоритм не подразумевает отображения пиксель в пиксель,
там происходит растяжение и сжатие строк и столбцов. Но т. к. Вам размеры
повернутого изображения не важны, то этот алгоритм можно сделать "точным".
Предположим для примера, что угол
поворота задан такой, что горизонтальная
прямая при
повороте на этот угол на каждые два пикселя по горизонтали поднимается
вверх на один пиксель (см. рисунки ниже 1, 2 и 3). Если присмотреться, то
на рисунках видна сетка, каждая ячейка это пиксель (если на Вашем мониторе
сетку не видно, то каждый квадратик, красный, черный, синий, это пиксель).
Исходный рисунок (Рис. 1) размером 8х3 состоит из трех цветных линий.
При первом сдвиге я просто поднял соответствующие столбцы (Рис. 2).
При втором сдвиге я сдвинул соответствующие строки (Рис. 3).
Вот этот Рис. 3 - это и есть повернутое изображение пиксель в пиксель.