iPhone: Как использовать CGContextConcatCTM для правильного сохранения преобразованного изображения? - PullRequest
3 голосов
/ 29 марта 2010

Я создаю приложение для iPhone, которое загружает изображение с камеры, а затем пользователь может выбрать второе изображение из библиотеки, переместить / масштабировать / повернуть это второе изображение и затем сохранить результат. Я использую два UIImageViews в 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 мне не очень помогает .. Прямо сейчас я пытаюсь решить эту проблему путем вычисления точек и угла с помощью тригонометрии (с помощью этот ответ ), но, поскольку преобразование есть, должен быть более простой и более гибкий способ сделать это, верно?

1 Ответ

0 голосов
/ 28 марта 2012

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

...