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度所需的結果?
看起來像使用CGImage而不是CIImage是票。而且我提高了精度。謝謝你的提示! –
UIImagePNGRepresentation和CIImage存在一些問題。遷移我的代碼後使用CGImage工作正常。 – mizerablebr