gpt4 book ai didi

ios - UIImagePNGRepresentation 在 CIFilter 之后返回 nil

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:37 27 4
gpt4 key购买 nike

在使用 CIAffineTransform 旋转 UIImage 后,在获取 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 header 或其他内容?是否有解决此行为的方法,或者是否有更好的方法来实现顺时针旋转 90 度的 UIImage 的 PNG 表示的预期结果?

最佳答案

不是大喊大叫,但 -M_PI_4 会以最高精度为您提供所需的常量:)

我看到的唯一一件事是您可能想要使用 [result extent] 而不是 [inputImage extent] 除非您的图像是已知的正方形。

但不确定这将如何导致 UIImagePNGRepresentation 失败。另一种想法...您创建一个 CGImage,然后在 UIImage 中使用 CIImage,也许使用 initWithCGImage 会得到更好的结果。

关于ios - UIImagePNGRepresentation 在 CIFilter 之后返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com