Сохранение 2 UIImages в одно при сохранении вращения, изменения размера информации и ее качества - PullRequest
4 голосов
/ 17 августа 2011

Я хочу сохранить 2 UIImage, которые перемещаются, изменяются в размерах и поворачиваются пользователем.Проблема в том, что я не хочу использовать такую ​​функцию, как любую 'printscreen one', потому что она заставляет оба изображения сильно терять из-за их качества (разрешения).

Atm, я использую что-то вроде этого:

UIGraphicsBeginImageContext(image1.size);
[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
[image2 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Однако он просто добавляет два изображения, их вращение, изменение размера и перемещение здесь не используются.Кто-нибудь может помочь с учетом этих 3 аспектов в кодировании?Любая помощь приветствуется!

Заранее большое спасибо:)

РЕДАКТИРОВАТЬ: изображения могут поворачиваться и масштабироваться пользователем (обработка сенсорных событий)!

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Вы должны установить преобразование контекста так, чтобы оно соответствовало преобразованию вашего imageView до того, как вы начнете рисовать в нем.

т.е.,

CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, boundingRect.size.width/2, boundingRect.size.height/2);
transform = CGAffineTransformRotate(transform, angle);
transform = CGAffineTransformScale(transform, 1.0, -1.0);

CGContextConcatCTM(context, transform);

// Draw the image into the context
CGContextDrawImage(context, CGRectMake(-imageView.image.size.width/2, -imageView.image.size.height/2, imageView.image.size.width, imageView.image.size.height), imageView.image.CGImage);

// Get an image from the context
rotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];

и извлечение Создание UIImage из повернутого UIImageView .

РЕДАКТИРОВАТЬ: если вы не знаете угол поворота изображения, вы можете получить преобразование из свойства слоя UIImageView:

UIGraphicsBeginImageContext(rotatedImageView.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform transform = rotatedImageView.transform;
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(context, transform);

// Draw the image into the context
CGContextDrawImage(context, CGRectMake(0, 0, rotatedImageView.image.size.width, rotatedImageView.image.size.height), rotatedImageView.image.CGImage);

// Get an image from the context
UIImage *newRotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];

UIGraphicsEndImageContext();

Вам нужно будет поиграться с матрицей преобразования, чтобы центрировать изображение в контексте, а также вам нужно будет рассчитать ограничивающий прямоугольник для повернутого изображения, или оно будет обрезано по углам (то есть rotatedImageView.image.size. недостаточно велик, чтобы охватить повернутую версию).

0 голосов
/ 17 августа 2011

Попробуйте это:

UIImage *temp = [[UIImage alloc] initWithCGImage:image1 scale:1.0 orientation: yourOrientation];
[temp drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];

Аналогично для image2.Вращение и изменение размера обрабатываются по ориентации и масштабу соответственно.yourOrientation является переменной перечисления UIImageOrientation и может иметь значение от 0 до 7 (см. эту документацию apple о различных значениях UIImageOrientation).Надеюсь, это поможет ...

РЕДАКТИРОВАТЬ: Для обработки поворотов, просто напишите желаемую ориентацию для нужного вам поворота.Вы можете повернуть на 90 градусов влево / вправо или перевернуть вертикально / горизонтально.Например, в документации Apple, UIImageOrientationUp равен 0, UIImageOrientationDown равен 1 и так далее.Посмотрите мой репозиторий github для примера.

...