2013-07-26 2 views
0

У меня есть 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, он получает перекос и положение не точно так же, вот скриншот:

enter image description here

Пожалуйста, наставит меня на то, что я делаю неправильно, спасибо за вашу помощь :)

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

+1

Попробуйте использовать представление PNG ... Иногда функция JPEG необъяснимо не работает, но функция PNG делает. –

+0

@DylanKirkby Спасибо за ваш комментарий, попробовал (http://screencast.com/t/0mgge4LEHRF) не повезло, ситуация сложнее, я думаю, что это как-то связано с различием в системе координат CG и UIKit:) –

ответ

1

Вместо поворота прямоугольника поверните весь контекст чертежа, а затем нарисуйте его в этом прямоугольнике.

Для примера le, это приведет к повороту изображения -15 градусов:

CGRect clipped = CGRectInset(screenRect, 100, 100); 
    CGContextRotateCTM(ctx, -15 * M_PI/180.0); 
    [imageView.image drawInRect: clipped]; 
+0

спасибо за то, что нашли время и ответили на мой вопрос :) Мне удалось решить проблему, не помню точно, какое решение, однако это можно увидеть в действии в appstore: https://itunes.apple.com/гб/приложение/Cena-я-фотокабине/id645765826 –

 Смежные вопросы

  • Нет связанных вопросов^_^