снимок, взятый из QCView, иногда пустой - PullRequest
1 голос
/ 11 января 2011

У меня есть программа воспроизведения кварцевых композиций в QCViews. Поскольку QCViews находятся на дополнительном экране, мне нужно отобразить (меньшую) копию на главном экране (вид экрана управления).

Поэтому я запускаю таймер каждые 0,1 секунды, делаю снимок QCView и устанавливаю полученное изображение в NSImageView.

Мои проблемы:

  • Снимок верен примерно в 90% случаев, но иногда пропадает. Как только это происходит, все снимки, сделанные из этого QCView, остаются пустыми, пока не будет stopRendering / startRendering. Это происходит даже тогда, когда в то же время работает другой QCView с точно такой же композицией, который дает хорошие снимки.

  • Снимки, похоже, не синхронизированы с QCView. Я пытался запустить таймер с более высокой частотой, но он ничего не изменил (я упоминаю об этом на случай, если это может быть связано с моей основной проблемой пустых изображений).

Есть идеи или указатели?

EDIT:

Я попытался воспроизвести: создал минимальный проект, затем скопировал и вставил мой код:

    - (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 с "системным временем" -> "форматером времени (format = ss)" -> "изображение со строкой" -> «спрайт» и снимок опаздывают ровно на одну секунду: они изменяются одновременно с исходными часами, но отображают предыдущее изображение ...

Звучит как ошибка, но, вероятно, не та, которая вызывает недействительные изображения ...

...