0

UIViewControler で単純な GPUImage 環境をセットアップしようとしました。ただし、空白の画面が表示されます。ソース画像を一定に保ちながら、渦巻きフィルターのプロパティをアニメーション化したいと考えています。これどうやってするの?

大規模なイメージに対して良好なパフォーマンス (> 30 fps) が必要なため、理想的には、GPU から CPU への不必要なピクセル コピーを回避したいと考えています。

- (void)viewDidLoad
{
    UIImage *inputImage = [UIImage imageNamed:@"image.jpg"];

    self.stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
    self.swirlFilter = [[GPUImageSwirlFilter alloc] init];
    self.swirlFilter.radius = 0.8;

    self.filteredImageView =
    [[GPUImageView alloc] initWithFrame:
        CGRectMake(0.0, 0.0,
                   self.view.frame.size.width,
                   self.view.frame.size.height)];

    [self.view addSubview:self.filteredImageView];

    // GPUImagePicture -> GPUImageFilter -> GPUImageView
    [self.stillImageSource addTarget:self.swirlFilter];
    [self.swirlFilter addTarget:self.filteredImageView];

    NSAssert(inputImage && _stillImageSource && _swirlFilter && _filteredImageView,
             @"Something unexpected is nil");
}

// Set up a the display link in View Did appear     

- (void) displayLinkDidFire:(CADisplayLink*)displayLink
{
    CGFloat proportion =
    [RSHelper proportionForTime:[[NSDate date] timeIntervalSinceReferenceDate]];

    self.swirlFilter.angle = proportion;

    // Do I need to call some kind of update call here?
}
4

1 に答える 1

1

わかりました。答えが見つかりましたprocessImageGPUImagePicture

- (void) displayLinkDidFire:(CADisplayLink*)displayLink
{
    self.swirlFilter.angle = [Helper calcProportion];
    [self.stillImageSource processImage];
}

GPUImage実際にはセットアップが非常に優れており、 GPUImage docsCoreImageに記載されているよりも高速であると思われます。一部のアップルのテクノロジーでサードパーティのライブラリを使用するのは苦痛ですが、利点やCoreImageは見当たりません。

于 2013-07-28T21:24:23.840 に答える