6

したがって、CIFilter を使用して HUE を変更する UISlider があります。uislider の使用中にベース イメージに影響を与えているため、めちゃくちゃ遅いです。

これをより効率的に行う方法についての提案はありますか?

 // UI SLIDER
-(IBAction)changeSlider:(id)sender {

    [self doHueAdjustFilterWithBaseImage:currentSticker.image 
                            hueAdjust:[(UISlider *)sender value]];

}
//Change HUE
-(void)doHueAdjustFilterWithBaseImage:(UIImage*)baseImage hueAdjust:(CGFloat)hueAdjust {

    CIImage *inputImage = [[CIImage alloc] initWithImage:baseImage];
    CIFilter * controlsFilter = [CIFilter filterWithName:@"CIHueAdjust"];

    [controlsFilter setValue:inputImage forKey:kCIInputImageKey];
    [controlsFilter setValue:[NSNumber numberWithFloat:hueAdjust] forKey:@"inputAngle"];

    //NSLog(@"%@",controlsFilter.attributes);

    CIImage *displayImage = controlsFilter.outputImage;
    CIContext *context = [CIContext contextWithOptions:nil];

    if (displayImage == nil){

        NSLog(@"Display NADA");

    } else {

        NSLog(@"RETURN Image");
        currentSticker.image =  [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]];

    }

    displayImage = nil;
    inputImage = nil;
    controlsFilter = nil;

}
4

3 に答える 3

3

UISlider の Continuous プロパティを NO に設定できます。ユーザーが指を離したときにのみ changeSlider が呼び出されるようにします。ここにAppleのドキュメントがありますか?

于 2012-06-17T01:37:29.013 に答える
2

ここでの問題は、コンテキストを再宣言し続けることです。コンテキストをプロパティとして配置し、初期化子で一度初期化してから、それを何度も使用すると、大幅なパフォーマンスの向上が見られます。

于 2013-01-29T21:36:05.673 に答える
1

私はむしろあなたが望む素晴らしい動作を変更すると思います.スライド中の頻繁な更新は良いことです! ユーザーエクスペリエンスに最適です。そのため、その動作を変更するのではなく、アルゴリズムを改善して最適化を向上させてください。いくつかの良いヒントがあるこの以前の質問を確認してください。

iOS プラットフォームに高速画像フィルターを実装する方法


私の行くことは、スライダーのプロパティを更新し続けることですが、スライダーが10進数全体の数値に達したときに更新を行う何かをコーディングしようとすることです(面白い用語、そしておそらく間違っています)スライダーが10.000、20.000を通過したときに検出することを意味します30.000。その後、すべてのポイントを更新するのではなく、画像を更新します。これが理にかなっていることを願っています。

編集:

あなたの、

mage 変数とフィルター変数を iVar として入力します。それらがすでに割り当てられていることを確認し、毎回作成するのではなく、再利用します。

于 2012-06-17T01:48:54.903 に答える