2014-02-26 60 views
3

在使用CIAffineTransform旋轉UIImage後遇到了獲取UIImage的PNG表示的問題。首先,我在UIImage上有一個類別,將圖像順時針旋轉90度。當我在UIImageView中顯示旋轉後的圖像時,它似乎能正常工作。UIImagePNGRepresentation在CIFilter後返回nil

-(UIImage *)cwRotatedRepresentation 
{ 
    // Not very precise, stop yelling at me. 
    CGAffineTransform xfrm=CGAffineTransformMakeRotation(-(6.28/4.0)); 
    CIContext *context=[CIContext contextWithOptions:nil]; 
    CIImage *inputImage=[CIImage imageWithCGImage:self.CGImage]; 
    CIFilter *filter=[CIFilter filterWithName:@"CIAffineTransform"]; 
    [filter setValue:inputImage forKey:@"inputImage"]; 
    [filter setValue:[NSValue valueWithBytes:&xfrm objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"]; 

    CIImage *result=[filter valueForKey:@"outputImage"]; 
    CGImageRef cgImage=[context createCGImage:result fromRect:[inputImage extent]]; 

    return [[UIImage alloc] initWithCIImage:result]; 

}

然而,當我嘗試實際獲得PNG爲新旋轉的圖像,UIImagePNGRepresentation返回零。

-(NSData *)getPNG 
{ 
    UIImage *myImg=[UIImage imageNamed:@"canada"]; 
    myImg=[myImg cwRotatedRepresentation]; 
    NSData *d=UIImagePNGRepresentation(myImg); 

    // d == nil :(
    return d; 
} 

核心圖像是否覆蓋PNG頭文件?有沒有解決這個問題的方法,或者是一種更好的方法來獲得UIImage的PNG表示的順時針旋轉90度所需的結果?

回答

4

不大喊大叫,但-M_PI_4會給你你想要以最高精確度:)不斷

,我看到的是你可能要使用[結果範圍]唯一的其他東西,而不是[inputImage的程度]除非你的圖像是方形的。

不知道如何這會導致UIImagePNGRepresentation失敗。另一個想法是......你創建一個CGImage,然後在UIImage中使用CIImage,或許使用initWithCGImage會給出更好的結果。

+0

看起來像使用CGImage而不是CIImage是票。而且我提高了精度。謝謝你的提示! –

+0

UIImagePNGRepresentation和CIImage存在一些問題。遷移我的代碼後使用CGImage工作正常。 – mizerablebr