从QCView获取的快照有时是空白的

时间:2011-01-11 20:29:27

标签: objective-c macos quartz-composer

我有一个程序在QCViews中播放石英成分。 由于QCViews位于辅助屏幕上,我需要在主屏幕(控制屏幕的类型)中显示(较小的)副本。

所以我每0.1秒触发一次计时器,拍摄QCView的快照,并在NSImageView中设置生成的图像。

我的问题:

  • 快照在90%的时间内都是正确的,但有时会变成空白。一旦发生这种情况,从此QCView获取的所有快照都是空白的,直到有一个stopRendering / startRendering。即使在同一个具有完全相同组成的QCView正在运行并提供良好快照的同时,也会发生这种情况。

  • 快照似乎与QCView不同步。我试图以更高的频率发射计时器,但它没有改变任何东西(我提到这个,以防它可能与我的空白图像的主要问题有关)。

任何想法或指示?

编辑:

我尝试重现:创建了一个最小的项目,然后复制粘贴我的代码:

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSRect r = NSMakeRect(0, 0, nb * 101, 101 );
    feedbackwindow = [[[NSWindow alloc] initWithContentRect: r
                                                         styleMask: NSResizableWindowMask
                                                           backing: NSBackingStoreBuffered
                                                             defer: NO ] retain ];
    for ( int n = 0; n < nb; n++ )
    {
        v[n] = [[[QCView alloc] init] autorelease];
        [v[n] setFrame: NSMakeRect( 101 * n,  0, 100, 100 ) ];
        [[window contentView] addSubview: v[n]];

        if(![v[n] loadCompositionFromFile:[[NSBundle mainBundle] pathForResource:@"clock" ofType:@"qtz"]]) {
            NSLog(@"Could not load composition");
        }

        [v[n] startRendering];

        img[n] = [[[NSImageView alloc] init] autorelease];
        [img[n] setFrame: NSMakeRect(101 * n,  0, 100, 100 ) ];
        [[feedbackwindow contentView] addSubview: img[n]];
    }

    [feedbackwindow orderFront:nil];
    [window orderFront:nil];

    [self setFeedbackTimer: [NSTimer scheduledTimerWithTimeInterval: ( 0.01 )
                                                             target: self
                                                           selector: @selector(updateImage)
                                                           userInfo: nil
                                                            repeats: YES ]];
}

- (void) updateImage
{
    for ( int n = 0; n < nb; n++ )
    {
        NSImage* snapshot = [v[n] snapshotImage];
        [img[n] setImage: snapshot];
    }
}

唉,我没有遇到问题......

QCViews的快照已经过时但非常好:(

快照似乎检索前一个图像而不是当前图像:我用“系统时间”制作了一个简单的Quartz Composer时钟 - &gt; “time formatter(format = ss)” - &gt; “带字符串的图像” - &gt; “sprite”和快照正好迟了一秒:它们与原始时钟同时改变,但显示上一张图像......

听起来像是一个错误,但可能与导致无效图像的错误相同......

0 个答案:

没有答案