1

我正在尝试访问屏幕的像素数据。非常奇怪的是,该方法适用于 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 的第一个问题。

4

0 回答 0