在Mac OS X窗口中显示自定义视频(RGB位图数据)

5
我正在寻找一种快速且可重复“blit” RGB位图数据到Mac OS X窗口中特定区域的最佳方法,以显示来自自定义视频引擎的实时视频帧。数据以包含32-BPP位图的简单C语言数组形式呈现。
在Win32上,我会设置HWND和HDC,将原始数据复制到其内存空间中,然后使用BitBlt()。在iOS上,我通过UIImageView完成了这个过程,尽管我没有完全评估该方法的性能(在那个特定有限的情况下确实不需要)。在Cocoa的Mac OS X上我都没有可用的方法,所以我应该怎么做呢?
我知道有几种办法可以让我完成这个任务,但我希望有经验的人能指出适合此用途和/或性能高效,同时相对简单可靠的方法。
谢谢!
2个回答

3
我建议使用您的数据创建 NSImageCGImage,然后将它们绘制到当前上下文中。
如果您使用 NSImage,您需要使用图像数据创建一个 NSBitmapImageRep。您不需要复制数据,只需将指针作为初始化器的参数之一传递即可。
如果您使用 CGImage,则可以使用 CGBitmapContextCreate() 创建一个 CGBitmapContextRef,并像上面一样,只需传递指向现有图像数据的指针。然后,您可以通过调用 CGBitmapContextCreateImage() 来从中创建一个 CGImage

谢谢。我还没有评估性能,但这似乎运行良好。 - Wookie

0

这就得到了解决...(32-BPP RGBA 位图数据)

int RowBytes = Width * 4;

NSBitmapImageRep * ImageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&Data pixelsWide:Width pixelsHigh:Height bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:RowBytes bitsPerPixel:32];

NSImage * Image = [[NSImage alloc] init];
[Image addRepresentation:ImageRep];

[ImageView setImage:Image];

与 Windows 位图相比,红色和蓝色通道被交换(RGBA vs BGRA),当然 Y 行的顺序也是相反的(即倒置),但这些都可以通过操作源数据轻松适应。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接