2

苹果在这里提供了一个捕获屏幕的源代码:http: //developer.apple.com/library/ios/#qa/qa1703/_index.html

但是,如果我不断地捕捉,UI 在渲染上下文时会变得非常慢。当我试图将它分派到不同的线程时,它会工作一段时间,但由于内存泄漏而崩溃。原因是它使用的一些 UIKit 调用不是线程安全的,只能在主线程中使用。

我正在寻找一种不同的方式来捕获屏幕而不使用 UIKIT 并使用纯 Quartz2d 代替。这是我所做的,但是当它捕获时,它会颠倒过来,图像并排翻倍,如果使用 iPAD 视网膜,图像在屏幕的 1/6 左右非常小:

CGSize imageSize = [[UIScreen mainScreen] bounds].size;
size_t bytesPerRow = imageSize.width * 5;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef context = CGBitmapContextCreate(buffer, imageSize.width, imageSize.height, 5, bytesPerRow, colorSpace,
                                             kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrderDefault);

for (UIWindow *window in [[UIApplication sharedApplication] windows])
{
    // Render the layer hierarchy to the current context
    [[window layer] renderInContext:context];

}

CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

有谁知道如何创建具有正确比例和适当坐标转换的适当上下文?

或者我的代码有什么问题?

或者有没有更好的方法在主线程之外做到这一点?

谢谢

4

0 回答 0