преобразование прямоугольника из одной системы в другую

Мне нужно преобразовать CGRect из одного UIImage в другой UIImage с измененным размером.

Например, если размер изображения A (исходный) = 100 100, а прямоугольник {50,50,50,50}

в A '(назначение) size = {50,50} необходимо преобразовать rect' (назначение rect) в {25,25,25,25}

Хотите знать, есть ли функция, которая может сделать это для меня? На данный момент просто преобразование системы координат, но в будущем, возможно, будут вращаться прямоугольники, и это может включать некоторую сложную тригонометрию - хотелось бы сохранить это.

Изменить: добавление изображения для объяснения проблемы Problem Definition


person Avner Barr    schedule 22.10.2013    source источник


Ответы (1)


Конечно, есть несколько помощников, готовых к использованию.

CGAffineTransform — это то, что вы ищете, например:

CGAffineTransform transform1 = CGAffineTransformMakeTranslation(-50, -50);
CGAffineTransform transform2 = CGAffineTransformMakeRotation(M_PI/2);
CGRect myRect = CGRectMake(100,100,100,100);
CGRect transformedRect = CGRectApplyAffineTransform(myRect, transform1);

Полный список см. в CGAffineTransform.h.

person Grzegorz Krukowski    schedule 22.10.2013
comment
это перевод прямоугольника назначения в пикселях (я имею в виду разницу в прямоугольнике) - person Avner Barr; 22.10.2013
comment
это координаты x, y :), что на самом деле не пиксель. Какие бы единицы вы ни использовали - они останутся прежними. - person Grzegorz Krukowski; 22.10.2013
comment
Хорошо, я попробую. Спасибо - person Avner Barr; 22.10.2013
comment
Просто для ясности: перевод представляет собой смещение в пикселях (x, y), что означает, что если мой исходный прямоугольник равен {50,50,200,200} в новой системе, где содержащий прямоугольник был уменьшен на {a,b} пикселей, исходный прямоугольник в этом система будет CGAffineTransform transform1 = CGAffineTransformMakeTranslation(-a, -b); CGRect преобразованныйRect = CGRectApplyAffineTransform(myRect, transform1); - person Avner Barr; 22.10.2013
comment
Я думаю, вы больше ищете CGAffineTransformMakeScale (xScale, yScale). Где шкалы соответствуют A'x / Ax и A'y / Ay. Если я правильно понял ваш пример, что вы пытаетесь сделать :) - person Grzegorz Krukowski; 22.10.2013
comment
Я свяжу изображение. я думаю это самое простое - person Avner Barr; 23.10.2013
comment
Отредактировал вопрос и добавил изображение - person Avner Barr; 23.10.2013