Поворот картинки тремя сдвигами
Любой поворот можно сделать 3-мя сдвигами. Например горизонтальным, вертикальным, и опять горизонтальным.
Для 90 градусов, эти сдвиги будут с коэффициентом 1, а значит точные.
Немного наглядности, для квадратика 4х4
Код:
abcd
efgh исходный квадрат
ijkl
mnop
abcd
fghe <
klij <<
pmno <<< - сдвигаем строки влево
0123 - сдвигаем столбцы вниз
amie
fbnj
kgco
plhd
miea >>> - сдвигаем строки вправо
njfb >>
okgc >
plhd
и получили повёрнутый квадрат
Для 8х8 аналогично получается. Вертикальные сдвиги можно проводить поэтапно: сначала сдвинуть на 1 биты по маске 55H; потом на 2 по маске 33H; и на 4 по маске 0FH.
Для углов не кратных 90 сдвиги будут давать некоторую погрешность. Но поскольку при сдвигах, ни один пиксель не потеряется, то погрешность отразится на их положении, но не на плотности.