У меня есть UIView, содержащий UIImageView, я применяю преобразование вращения к UIImageView, а затем хочу нарисовать это изображение с таким же преобразованием поворота в CGContext (и в будущем будет больше преобразований, таких как перевод и шкала будет использована), у меня есть следующий код для преобразования и рисования в CGContext:UIImage с CGAffineTransform, нарисованный в CGContext странный вывод
UIImage *image=[UIImage imageNamed:@"cena-1.png"];
CGRect imageFrame=CGRectMake(50, 50, image.size.width, image.size.height);
UIImageView *imageView=[[UIImageView alloc] initWithFrame:imageFrame];
imageView.image=image;
[self.view addSubview:imageView];
CGAffineTransform imageTransform=CGAffineTransformMakeRotation(degreesToRadians(10));
imageView.transform=imageTransform;
NSLog(@"self.imgOverlay.image.scale: %f", imageView.image.scale);
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
CGContextConcatCTM(context, imageView.transform);
CGRect modifiedRect=CGRectApplyAffineTransform(imageFrame, imageTransform);
[imageView.image drawInRect:modifiedRect];
UIGraphicsPopContext();
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSString *jpgPath=[NSTemporaryDirectory() stringByAppendingPathComponent:@"test.jpg"];
NSData *imageData=UIImageJPEGRepresentation(outputImage, 1.0);
[imageData writeToFile:jpgPath atomically:YES];
NSLog(@"putputImage path: %@", jpgPath);
.
Проблема заключается в outputimage не выглядит так же, как это показано в UIView UIKit, он получает перекос и положение не точно так же, вот скриншот:
Пожалуйста, наставит меня на то, что я делаю неправильно, спасибо за вашу помощь :)
ps Я также разместил еще один вопрос (https://stackoverflow.com/questions/17873202/uiimage-drawn-in-cgcontext-with-cgaffinetransform-unexpected-results) с объяснением полного сценария, однако ответа на этот вопрос, надеюсь, будет достаточно.
UPDATE Я попытался [imageView.image drawAtPoint:modifiedRect.origin];
исправляет перекос проблемы (http://screencast.com/t/v2oKkmkd), но вопрос остается позиция :(
UPDATE 2 Вот тестовый проект с небольшим количеством модифицированного кодом: https://github.com/abduliam/TestTransform
Попробуйте использовать представление PNG ... Иногда функция JPEG необъяснимо не работает, но функция PNG делает. –
@DylanKirkby Спасибо за ваш комментарий, попробовал (http://screencast.com/t/0mgge4LEHRF) не повезло, ситуация сложнее, я думаю, что это как-то связано с различием в системе координат CG и UIKit:) –