我正在尝试访问屏幕的像素数据 . 非常奇怪的是,该方法适用于ipad 3,但在ipod touch 4上失败 . 首先,我使用FastBlurredNotificationCenter中的一些行从屏幕抓取UIImage:

IOSurfaceRef surface = [UIWindow createScreenIOSurface];
UIImage *imageui = [[UIImage alloc] _initWithIOSurface:surface scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];

这肯定适用于两种设备 .

然后,我试图从UIImage获得一个CGImage:

CGImageRef imagecg = imageui.CGImage

此代码不适用于ipod(cgimage size = {0,0}) . 所以我假设可以从CIImage创建UIImage并添加一行来测试:

NSLog(@"debug-ciimage:%@-cgimage:%@",imageui.CIImage,imageui.CGImage);

两个结果都是“空” . 我不知道如何从其CGImage或PNG表示中访问UIImage execpt的像素数据 . 请帮忙...

尝试的方法列表:1 . [UIImage CGImage]; 2. [UIImage CIImage]; 3. [UIImage drawInRect:imageRect]; (由UIGraphicsBeginImageContextWithOptions提供的上下文(contextsize,NO,0.0f);)

add:以某种方式解决问题 . 但是从IOSurface创建的UIImage的图像类型仍然是未知的...解决方案是避免我无法处理的UIImage ...从iphonedevwiki,有一个替代 -(id)initWithIOSurface:(IOSurfaceRef)ioSurface;

那是

CGImageRef UICreateCGImageFromIOSurface(IOSurfaceRef ioSurface);

它适用于两种设备 .

结论是initWithIOSurface适合你,如果你想在UIView上使用它,否则使用UICreateCGImageFromIOSurface,这样你就可以轻松地将它转换成你喜欢的 .

感谢JustSid在stackoverflow上提出第一个问题 .