2012-01-27 4 views
4

У меня возникли проблемы при рисовании NSCIImageRep, который я получаю с помощью QTKit mCaptureDecompressedVideoOutput.Как нарисовать NSCIImageRep для NSView

Поскольку я не хочу, чтобы нарисовать изображение с помощью OpenGL, я попытался создать подкласс NSView и нарисовать изображение там:

- (void) drawRect:(NSRect)dirtyRect 
{ 
    NSLog(@"DrawInRect"); 
    CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort]; 

    if (imageRep != nil) 
    { 
     CGImageRef image = [imageRep CGImageForProposedRect: &dirtyRect context: [NSGraphicsContext currentContext] hints:nil]; 
     CGContextDrawImage(myContext, dirtyRect, image); 
     CGImageRelease(image); 
    } 
} 

imageRep является указателем на CGImageRef я получить с помощью обратного вызова mCaptureDecompressedVideoOutput

- (void)captureOutput:(QTCaptureOutput *)captureOutput didOutputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection *)connection`. 

Этот код вызывает сбой моей машины. Какие-либо предложения?

+0

Можете ли вы опубликовать трассировку стека из аварии? –

ответ

4

Вам не нужно проходить через CGImageRef, чтобы нарисовать NSCIImageRep. Просто спросите его на CIImage и нарисуйте что:

CIImage* anImage = [yourNSCIImageRep CIImage]; 
[anImage drawAtPoint:NSZeroPoint 
      fromRect:NSRectFromCGRect([anImage extent]) 
      operation:NSCompositeSourceOver 
      fraction:1.0]; 
+1

Да, это то, что я узнал в конце концов. Я действительно попытался преобразовать его в NSImage, но это привело к некоторым необъяснимым утечкам памяти при рисовании. – Koffiman