0

ローカル画像を使用して CIGausianBlur フィルターを作成できます。現在、同じ形式を使用して CIKaleidoscope フィルターと CILightTunnel を作成しようとしています。万華鏡フィルターの私のコードは次のとおりです。

- (UIImage *)applyKaleidoscopeToImage:(UIImage *)image {

    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *ci_image = [CIImage imageWithCGImage:image.CGImage];
    CIFilter *filter = [CIFilter filterWithName:@"CIKaleidoscope"];
    [filter setValue:ci_image forKey:kCIInputImageKey];
    [filter setValue:@55 forKey:kCIInputAngleKey];
    CIVector *civ = [CIVector vectorWithX:50 Y:50];
    [filter setValue:civ forKey:kCIInputCenterKey];
    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];

    return [UIImage imageWithCGImage:cgImage scale:image.scale orientation:image.imageOrientation];
}

このメソッドでは、タイプ NSException のキャッチされない例外が発生し、配列オブジェクトを nil 値に置き換えようとしているという警告が表示されます。

CILightFilter の私のコードは次のとおりです。

- (UIImage *)applyLightTunnelToImage:(UIImage *)image {

    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *ci_image = [CIImage imageWithCGImage:image.CGImage];
    CIFilter *filter = [CIFilter filterWithName:@"CILightTunnel"];
    [filter setValue:ci_image forKey:kCIInputImageKey];

    CIVector *civ = [CIVector vectorWithX:50 Y:50];
    [filter setValue:civ forKey:kCIInputCenterKey];

    [filter setValue:@5 forKey:kCIInputRadiusKey];

    //[filter setValue:@45 forKey:kCIInputAngleKey];

    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];

    return [UIImage imageWithCGImage:cgImage scale:image.scale orientation:image.imageOrientation];
}

ここでも同じ nil 結果が得られます。ご協力いただきありがとうございます。

4

1 に答える 1

0

どちらも破壊的なフィルターであるため、rect パラメーター[result extent]は常に無意味な数値になります。元のrectまたは見たいrectを使用すると、おそらく正しく機能します。

于 2014-06-24T06:42:12.203 に答える