什么是在高帧率下呈现和缩放图像的最快方法?
我使用drawRect绘制(并缩放)NSBitmapImageRep以达到约30FPS,但它占用大量CPU。
以下是每秒设置NSBitmapImageRep像素的示例代码:
NSBitmapImageRep的drawInRect使用了大量的CPU。在高帧率下,缩放和绘制图像的最快方式是什么?源图像应该是一张可以直接设置像素的图像,例如通过获取位图数据指针。
如果将NSBitmapImageRep转换为CIImage并使用[ciImage drawInRect]进行绘制,则速度约快10%。如果绘制到NSOpenGLView而不是NSView,则速度再次提高约10%,但仍然需要大量CPU时间来进行缩放/drawInRect操作。
我使用drawRect绘制(并缩放)NSBitmapImageRep以达到约30FPS,但它占用大量CPU。
以下是每秒设置NSBitmapImageRep像素的示例代码:
NSInteger x, y;
unsigned char *imgptr = nsBitmapImageRepObj.bitmapData;
unsigned char *ptr;
NSInteger rowBytes = nsBitmapImageRepObj.bytesPerRow;
for (y = 0; y < nsInputFrameRect.size.height; y++) {
ptr = imgptr + (y * rowBytes);
for (x = 0; x < nsInputFrameRect.size.width; x++) {
*ptr++ = 1; // R
*ptr++ = 2; // G
*ptr++ = 3; // B
}
}
[self setNeedsDisplay:YES];
以30FPS的帧率进行绘制:
- (void)drawRect:(NSRect)pRect {
[NSGraphicsContext saveGraphicsState];
[nsBitmapImageRepObj drawInRect:pRect];
[NSGraphicsContext restoreGraphicsState];
} // end drawRect
NSBitmapImageRep的drawInRect使用了大量的CPU。在高帧率下,缩放和绘制图像的最快方式是什么?源图像应该是一张可以直接设置像素的图像,例如通过获取位图数据指针。
如果将NSBitmapImageRep转换为CIImage并使用[ciImage drawInRect]进行绘制,则速度约快10%。如果绘制到NSOpenGLView而不是NSView,则速度再次提高约10%,但仍然需要大量CPU时间来进行缩放/drawInRect操作。