簡體   English   中英

CGImage不能CIFilter圖像兩次

[英]Cannot CIFilter image twice CGImage nil the seconds time

我將過濾器應用於自定義UIImageView類中的過濾圖像,以便在設置“色相”時過濾圖像。 但是,當我調用以下代碼時,[[self image] CGImage]第一次返回正確的值。 [[self image] CGImage]周圍的第二次為零,因此CIFilter返回也為零。

有一個更好的方法嗎?

- (void)setHue:(CGFloat)aHue
{
    hue = aHue;
    NSLog( @"CG Image? %@", [[self image] CGImage] );
    CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"];
    [filter setDefaults];
    [filter setValue:[CIImage imageWithCGImage:[[self image] CGImage]]
              forKey:@"inputImage"];
    NSLog( @"Setting new hue %f", aHue );
    [filter setValue:[NSNumber numberWithFloat:aHue] forKey:@"inputAngle"];
    [self setImage:[UIImage imageWithCIImage:[filter valueForKey:@"outputImage"]]];

    NSLog( @"Output image %@", [self image] );
}

UIImage可以由CGImageCIImage來支持。 一次運行此函數並調用[UIImage imageWithCIImage] ,新的UIImage現在由CIImage支持。

這實際上很好,因為下一次此功能可以運行得更快! 您可以簡單地檢查一下CIImage存在並直接使用它:

- (void)setHue:(CGFloat)aHue
{
    hue = aHue;
    NSLog( @"CG Image? %@", [[self image] CGImage] );
    CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"];
    [filter setDefaults];
    if ([[self image] CGImage]) {
      [filter setValue:[CIImage imageWithCGImage:[[self image] CGImage]] forKey:@"inputImage"];
    }
    else {
      [filter setValue:[[self image] CIImage] forKey:@"inputImage"];
    }

    NSLog( @"Setting new hue %f", aHue );
    [filter setValue:[NSNumber numberWithFloat:aHue] forKey:@"inputAngle"];
    [self setImage:[UIImage imageWithCIImage:[filter valueForKey:@"outputImage"]]];

    NSLog( @"Output image %@", [self image] );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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