[英]UIImagePNGRepresentation returns nil after CIFilter
在使用CIAffineTransform旋转它后,遇到了为UIImage获取PNG表示的问题。 首先,我在UIImage上有一个类别,可以将图像顺时针旋转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标题或其他内容? 有没有办法绕过这种行为,或者是一种更好的方法来实现顺时针旋转90度的UIImage的PNG表示所需的结果?
不要大喊大叫,但是-M_PI_4会给你最大精度的常量:)
我看到的唯一另一件事是你可能想要使用[result extent]而不是[inputImage extent],除非你的图像是已知的方形。
不知道如何导致UIImagePNGRepresentation失败。 另一个想法...你创建一个CGImage,然后在UIImage中使用CIImage,也许使用initWithCGImage会得到更好的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.