iOS屏幕截图但不阻止主线程

时间:2012-12-14 17:27:41

标签: objective-c ios cocoa-touch uikit quartz-2d

Apple在此处提供了捕获屏幕的源代码: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);

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

或者我的代码出了什么问题?

或者有没有更好的方法从主线程中做到这一点?

由于

0 个答案:

没有答案