我正在尝试访问屏幕的像素数据。非常奇怪的是,该方法适用于 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})。所以我假设 UIImage 可以从 CIImage 创建并添加一行来测试:
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);)
补充:以某种方式解决了问题。但是从 IOSurface 创建的 UIImage 的图像类型仍然未知......解决方案是避免我无法处理的 UIImage ......从iphonedevwiki,有一个替代方案
-(id)initWithIOSurface:(IOSurfaceRef)ioSurface;
那是
CGImageRef UICreateCGImageFromIOSurface(IOSurfaceRef ioSurface);
它适用于两种设备。
结论是如果你想在 UIView 上使用 initWithIOSurface 适合你,否则使用 UICreateCGImageFromIOSurface 以便你可以轻松地将它转换为你喜欢的。
感谢 JustSid 帮助我解决了关于 stackoverflow 的第一个问题。