iPhone: как использовать CGContextConcatCTM для правильного сохранения преобразованного изображения?

Я делаю приложение для iPhone, которое загружает изображение с камеры, а затем пользователь может выбрать второе изображение из библиотеки, переместить/масштабировать/повернуть это второе изображение, а затем сохранить результат. Я использую два UIImageView в IB в качестве заполнителей, а затем применяю преобразования, касаясь/сжимая.

Проблема возникает, когда мне нужно сохранить оба изображения вместе. Я использую прямоугольник размера первого изображения и передаю его UIGraphicsBeginImageContext. Затем я попытался использовать CGContextConcatCTM, но не могу понять, как это работает:

CGRect rect = CGRectMake(0, 0, img1.size.width, img1.size.height); // img1 from camera
UIGraphicsBeginImageContext(rect.size); // Start drawing
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect); // Clear whole thing
[img1 drawAtPoint:CGPointZero]; // Draw background image at 0,0
CGContextConcatCTM(ctx, img2.transform); // Apply the transformations of the 2nd image

Но что мне нужно делать дальше? Какая информация хранится в матрице img2.transform? К сожалению, документация для CGContextConcatCTM мне не очень помогает. Сейчас я пытаюсь решить ее, вычислив точки и угол с помощью тригонометрии (с помощью этот ответ), но так как преобразование есть, должно быть более простой и элегантный способ сделать это, верно?


person phi    schedule 29.03.2010    source источник
comment
Я предполагаю, что проблема в том, что Quartz применяет преобразование из левого верхнего угла :/ Я до сих пор не знаю, как это решить.   -  person kubbing    schedule 14.11.2011


Ответы (1)


Взгляните на этот отличный ответ, вам нужно создать контекст растрового изображения/изображения, нарисовать его и получить результирующее изображение. Затем вы можете сохранить это. ориентация результирующего изображения iOS UIImagePickerController после загрузки

person Scott Corscadden    schedule 28.03.2012