我有一個包含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的顯示,它被扭曲和位置是不準確的爲好,這裏是截圖:
請指引我關於我在做什麼錯,謝謝你的幫助:)
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
嘗試使用PNG表示...有時JPEG功能莫名其妙地不工作,但PNG功能一樣。 –
@DylanKirkby感謝您的評論,嘗試過(http://screencast.com/t/0mgge4LEHRF)沒有運氣,情況更加複雜,我認爲它與CG和UIKit的座標系的差異有關: ) –