跳至主要内容

离屏渲染

概述

离屏渲染允许您在位图中获取 BrowserWindow 的内容,因此它可以渲染在任何地方,例如 3D 场景中的纹理上。Electron 中的离屏渲染使用与 Chromium Embedded Framework 项目类似的方法。

注意:

  • 可以使用两种渲染模式(请参阅下面的部分),并且只有脏区域被传递到 paint 事件以提高效率。
  • 您可以停止/继续渲染以及设置帧速率。
  • 最大帧速率为 240,因为更大的值只会带来性能损失而没有好处。
  • 当网页上没有任何操作时,不会生成帧。
  • 离屏窗口始终被创建为 无边框窗口

渲染模式

GPU 加速

GPU 加速渲染意味着 GPU 用于合成。因此,必须从 GPU 复制帧,这需要更多资源,因此此模式比软件输出设备慢。此模式的好处是支持 WebGL 和 3D CSS 动画。

软件输出设备

此模式使用软件输出设备在 CPU 中进行渲染,因此帧生成速度快得多。因此,此模式优于 GPU 加速模式。

要启用此模式,必须通过调用 app.disableHardwareAcceleration() API 来禁用 GPU 加速。

示例

const { app, BrowserWindow } = require('electron/main')
const fs = require('node:fs')
const path = require('node:path')

app.disableHardwareAcceleration()

function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
offscreen: true
}
})

win.loadURL('https://github.com')
win.webContents.on('paint', (event, dirty, image) => {
fs.writeFileSync('ex.png', image.toPNG())
})
win.webContents.setFrameRate(60)
console.log(`The screenshot has been successfully saved to ${path.join(process.cwd(), 'ex.png')}`)
}

app.whenReady().then(() => {
createWindow()

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})

启动 Electron 应用程序后,导航到应用程序的工作文件夹,您将在其中找到渲染的图像。