苹果在这里提供了一个捕获屏幕的源代码: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);
有谁知道如何创建具有正确比例和适当坐标转换的适当上下文?
或者我的代码有什么问题?
或者有没有更好的方法在主线程之外做到这一点?
谢谢