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);
有谁知道如何使用正确的比例和正确的坐标转换创建适当的上下文?
或者我的代码出了什么问题?
或者有没有更好的方法从主线程中做到这一点?
由于