在使用CIAffineTransform旋转UIImage后,我遇到了无法获得PNG表示的问题。首先,我有一个UIImageView类别可以将图像顺时针旋转90度。当我在UIImageView中显示旋转后的图像时,它似乎可以正常工作。
-(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返回nil。
-(NSData *)getPNG
{
UIImage *myImg=[UIImage imageNamed:@"canada"];
myImg=[myImg cwRotatedRepresentation];
NSData *d=UIImagePNGRepresentation(myImg);
// d == nil :(
return d;
}
核心图像是否覆盖了PNG头文件或其他内容? 有没有办法避免这种行为,或者更好的实现所需结果,即UIImage的PNG表示顺时针旋转90度?