display.save()

类型 函数
display.*
返回值
修订 版本 2024.3703
关键词 屏幕截图,屏幕捕获,保存屏幕
另请参阅 display.capture()
display.captureBounds()
display.captureScreen()

概述

将第一个参数引用的显示对象渲染为 JPEG 或 PNG 图像,并将其保存为新文件。显示对象当前必须位于显示层次结构中,否则不会保存图像。如果对象是显示组,则所有子对象也会被渲染。

启用内容缩放时,display.save() 会以设备的原始分辨率保存图像。例如,如果使用此方法保存 100×200 像素的显示对象,则在分辨率较高的设备上保存时,它可能具有更多实际像素。

陷阱

Android

当应用暂停时,Android 操作系统会从内存中移除所有 OpenGL 纹理。当应用恢复时,Corona 必须重新加载所有图像,但捕获的图像不再存在于内存中。您不能在 Android "applicationSuspend""applicationExit" 事件中使用 display.save() 函数,因为内存中没有要保存的 OpenGL 纹理。

启动时保存

如果您需要在应用程序启动时保存显示对象,例如在执行 main.lua 来初始化应用程序时,则必须在 timer.performWithDelay() 调用中调用 display.save()。建议至少延迟 100 毫秒。

local function saveWithDelay()
    display.save( group, "group.jpg" )
end

timer.performWithDelay( 100, saveWithDelay )

语法

display.save( displayObject, options )
displayObject (必需)

DisplayObject. 引用要保存的显示对象/组的变量。

options (可选)

. 保存选项的表 — 有关详细信息,请参阅下一节。

选项参考

filename (必需)

字符串. 要保存为 JPEG 或 PNG 的文件名。

baseDir (可选)

常量. 以下值之一(system.DocumentsDirectory 为默认值)

  • system.DocumentsDirectory
  • system.ApplicationSupportDirectory
  • system.TemporaryDirectory
  • system.CachesDirectory
backgroundColor (可选)

. 包含要使用的背景清除颜色的表数组。表格式可以是以下之一,其中每个值的范围在 01 之间

  • { gray }
  • { gray, alpha }
  • { red, green, blue }
  • { red, green, blue, alpha }
captureOffscreenArea (可选)

布尔值. 如果为 true,则保存整个对象/组,即使屏幕上不可见的部分也会保存。如果省略,则保存将限制在屏幕边界内。出于旧版兼容性目的,可以使用已弃用的 isFullResolution 选项名称,其效果相同。

jpegQuality (可选)

数字. 指示保存的 JPEG 图像质量的值,介于 01 之间。对 PNG 没有影响。这仅适用于设备,不适用于 Corona Simulator。

语法(旧版)

display.save( displayObject, filename [, baseDir] )
displayObject (必需)

DisplayObject. 引用要保存的显示对象/组的变量。

filename (必需)

字符串. 要保存为 JPEG 或 PNG 的文件名。

baseDir (可选)

常量. 以下值之一(system.DocumentsDirectory 为默认值)

  • system.DocumentsDirectory
  • system.ApplicationSupportDirectory
  • system.TemporaryDirectory
  • system.CachesDirectory

示例

local myObject1 = display.newRect( 50, 50, 100, 150 )  -- Create a rectangle object
local myObject2 = display.newCircle( 100, 300, 50 )    -- Create a circle object

local group = display.newGroup()
 
group:insert( myObject1 )
group:insert( myObject2 )

display.save( group, { filename="entireGroup.png", baseDir=system.DocumentsDirectory, captureOffscreenArea=true, backgroundColor={0,0,0,0} } )