簡體   English   中英

UIFmagePNGRepresentation在CIFilter之后返回nil

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM