iphone - 使用 iPhone X 屏幕截图中的图像时 GPUImage2 返回 false

标签 iphone swift screenshot gpuimage iphone-x

我 try catch iPhone X 的屏幕并使用 GPUImage 2。

let success = sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)
if !success {
    return
}

此代码将返回 false,并且我的应用程序崩溃。

我尝试使用 iPhone X 的屏幕截图将此图像发送到其他 iOS 设备,并使用其他 iOS 设备的屏幕截图,此代码仍然有效。

为什么?有人能解释一下吗?

最佳答案

我在同一行代码中遇到了问题,看来我的修复helped someone else on a crash issue on iPhoneX

作为一个猴子补丁,我更改了 RenderView.swift 文件中的以下几行(从第 62 行开始):

sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)

var backingWidth:GLint = 0
var backingHeight:GLint = 0
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_WIDTH), &backingWidth)
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_HEIGHT), &backingHeight)

通过这个:

let group = DispatchGroup()
group.enter()

DispatchQueue.main.async {
    sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)
    group.leave()
}
group.wait()

var backingWidth:GLint = 0
var backingHeight:GLint = 0
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_WIDTH), &backingWidth)
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_HEIGHT), &backingHeight)

我猜您遇到的最初问题是这个调用:

sharedImageProcessingContext.context.renderbufferStorage(Int(GL_RENDERBUFFER), from:self.layer as! CAEAGLLayer)

需要在主线程上完成(也许 iphoneX 在后台线程修改 UI 时具有更多限制性的运行时)。简单地在主线程上调用它是不够的,因为超过的值也需要是最新的(这就是为什么我等到它结束才继续)。 在我看来,暂停的持续时间非常短,可以忽略不计。

编辑:为了将来的帮助,最好告诉我们您的代码行来自哪个文件。一些错误日志也会有帮助。

关于iphone - 使用 iPhone X 屏幕截图中的图像时 GPUImage2 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455199/

相关文章:

iphone - 如何启动和停止 NSTimer?

ios - 使用旧版 Swift 构建的应用程序能否在应用程序商店中无限期存在?

ios - 如何使用GCD绘制图像?

screenshot - 如何在全屏模式下拍摄命令提示符窗口的快照

javascript - D3.js 与维基百科的集成

iphone - UITextField 和 UITextView 的内容到 NSString

iphone - HTML5音频播放器可在Safari/Chrome上运行,但不能在iPhone上运行

iphone - Objective-C 访问数组

ios - 来自 Storyboard 的 View 不会出现在 Xcode Preview 中

ios - 在我们的应用程序外部使用 "Open Image with our app"和 "sleep/wake"按钮进行屏幕截图时,如何获取我们应用程序的本地通知 "home"