Предположим, у меня есть произвольное входное изображение с шириной w1 и высотой h1 . Я хочу повернуть это изображение на 360 градусов обратно в исходное положение. Однако если изображение состоит из чего-либо, кроме круга, то края изображения будут обрезаны, если холст, на котором оно нарисовано, останется размером w1 на h1 .
Тогда мне нужно определить размер холста (ширина w2 и высота h2 ), который можно использовать для всех повернутых версий входного изображения. Я знаю, что w2 == h2 , и, следовательно, желаемый размер холста является квадратом, потому что очевидно, что мы вращаем что-то относительно центральной точки и конечного изображения (после 360 оборотов) по сути это круг.
Еще одна вещь, которую следует учитывать, это то, что такие объекты, как квадраты, будут иметь углы, которые будут выступать, поэтому простое использование максимального значения ширины или высоты для обоих измерений также не работает.
Одно из решений, которое я придумала, - создать холст большего размера, чем мне нужно (например, установив w2 и h2 на max(w1, h1) * 2
, вращая все, а затем обрезая все прозрачные пиксели. Это не очень эффективно, и я бы предпочел рассчитать самый жесткий ограничивающий прямоугольник заранее.