2013-07-26 46 views
0

我有一個包含UIImageView的UIView,我將旋轉變換應用到UIImageView,然後想要在CGContext中使用相同的旋轉變換繪製該圖像(以及將來更多的變換,如轉換和規模將被使用),我有以下代碼進行CGContext中的轉換和繪製:用CGContext繪製CGAffineTransform的UIImage奇怪的輸出

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看起來不一樣,因爲它是UIKit中的UIView的顯示,它被扭曲和位置是不準確的爲好,這裏是截圖:

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),但位置問題仍然:(

更新2 下面是一個測試項目,一點點修改後的代碼:https://github.com/abduliam/TestTransform

+1

嘗試使用PNG表示...有時JPEG功能莫名其妙地不工作,但PNG功能一樣。 –

+0

@DylanKirkby感謝您的評論,嘗試過(http://screencast.com/t/0mgge4LEHRF)沒有運氣,情況更加複雜,我認爲它與CG和UIKit的座標系的差異有關: ) –

回答

1

不是旋轉矩形,而是旋轉整個圖形上下文,然後在該矩形中繪製它。

對於示例嘞,這將繪製圖像旋轉15度:

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

感謝您花時間回答我的問題:)我確實設法解決了這個問題,不記得是什麼解決方案,但是它可以在appstore上的行動中看到:https://itunes.apple.com/GB /應用/以上的價格-ME-大頭/ id645765826 –