cocoa - 如何将 NSCIImageRep 绘制到 NSView

标签 cocoa qtkit

我在绘制通过 QTKit mCaptureDecompressedVideoOutput 获得的 NSCIImageRep 时遇到问题。

由于我不想使用 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是指向我通过mCaptureDecompressedVideoOutput回调获得的CGImageRef的指针

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

此代码使我的机器崩溃。有什么建议么?

最佳答案

您不需要仅仅通过 CGImageRef 来绘制 NSCIImageRep。只需要它提供一个 CIImage 并绘制它即可:

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

关于cocoa - 如何将 NSCIImageRep 绘制到 NSView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033607/

相关文章:

macos - 获取 macOS 键盘类型并检测内置、屏幕或 USB

objective-c - 如何使 QTMovie 从具有强制(MP3)类型的 URL 播放文件?

objective-c - QTKit - 合并两个具有不同宽度和高度的视频?

macos - QTKit 在 mac os 中播放 protected 视频(HDCP)

objective-c - QTKit 可以播放哪些视频文件格式?

macos - NSSharingService 实例在 cocoa 中返回 nil

objective-c - NSPanel 设置在 Desktopwindowlevel +1 时出现登录时可见的问题

objective-c - Cocoa block 变量内存管理

objective-c - LSSharedFileListInsertItemURL 不更改名称

audio - QTKit 没有正确混合音轨