Поворот спрайта на произвольный угол - это частный случай двумерной интерполяции. Исходный спрайт можно представить как функцию двух переменных (поверхность), заданную таблично. Требуется найти значения этой функции в точках, которые будут пикселами нового спрайта. Проблема в том, что новые точки в общем случае не совпадают со старыми, поэтому значения функции в них не заданы. Единственный случай, когда точки совпадают - это поворот спрайта на угол, кратный 90 градусам.
Так вот, значения функции в новых точках не заданы, поэтому их приходится оценивать исходя из имеющихся значений этой функции в старых точках + некоторых представлениях о виде функции.
Самый простой случай - интерполяция ближайшим соседом. В качестве оценки значения функции используется ее значение в ближайшей точке, где оно задано. Такой метод дает результаты, которые выглядят примерно похоже на результат поворота исходного спрайта, но качество оставляет желать лучшего.
Второй часто используемый метод - линейная интерполяция. Это по результатам то же самое, что описал SpecialistMK87, но проще в реализации. Значения функции между точками, где оно задано, вычисляется в виде линейной комбинации от координат. Этот метод дает более высокое качество и реализован в большинстве современных видеокарт аппаратно.
Третий часто используемый метод - кубическая интерполяция. Он считается подходящим для высококачественной обработки изображений, хотя и он дает некоторое ухудшение качества.
Вышеописанные методы - линейный и кубический - а также другие более сложные методы двумерной интерполяции дают дробные значения для новых пикселов, а в случае Spectrum эти значения нужно округлять до 0 либо 1, что также вносит искажения. Поэтому, даже при использовании самых современных и теоретически обоснованных методов интерполяции, значительное ухудшение качества изображения при повороте неизбежно. При размере спрайта 16х16 я не вижу никаких перспектив в автоматическом повороте. То есть повернуть-то можно, но потом все равно придется руками править, чтобы получить хороший результат. Помню, как мы для игры Monty черепа вращающиеся рисовали - гемор был еще тот.
Если не в реальном времени - то вращать спрайты лучше всего в каком-нибудь фотошопе. Там реализованы современные методы обработки изображений.




Ответить с цитированием