类型 函数 库 display.* 返回值 显示对象 修订 版本 2024.3703 关键词 屏幕截图,屏幕捕捉,保存屏幕 另请参阅 display.save() display.captureBounds() display.captureScreen()
此函数与 display.save() 相同,但它返回一个显示对象,而不是默认保存到文件。您可以选择将捕捉保存到设备的相册,但这并非默认操作 — 您必须在调用该函数时明确告知它这样做。
本质上,可以将 display.capture() 视为 display.save() 和 display.captureScreen() 的混合体。
此捕捉函数将仅捕捉在 OpenGL 中渲染的内容。它**不会**捕捉原生显示对象,例如文本输入框/字段、网页弹出窗口、广告等。
当应用暂停时,Android 操作系统会从内存中移除所有 OpenGL 纹理。当应用恢复时,Corona 必须重新加载所有图像,但捕捉图像不再存在于内存中。如果您需要在 Android 中恢复捕捉的图像,可以使用以下解决方案
"applicationSuspend" 和 "applicationExit" 事件 中使用 display.save() 函数,因为内存中没有要保存的 OpenGL 纹理。此外,如果您在 saveToPhotoLibrary 选项 中设置值为 true,则必须在 build.settings 文件中设置以下权限
settings =
{
android =
{
usesPermissions =
{
"android.permission.WRITE_EXTERNAL_STORAGE",
},
},
}
在 iOS 上,如果您在 saveToPhotoLibrary 选项 中设置值为 true,则必须在 build.settings 的 plist 表中包含以下键/描述。当系统提示用户允许访问时,相关的描述将作为警报的一部分显示。请注意,您可以根据自己的喜好自定义这些描述,甚至可以对其进行本地化(指南)。
settings =
{
iphone =
{
plist =
{
NSPhotoLibraryUsageDescription = "This app would like to access the photo library.",
NSPhotoLibraryAddUsageDescription = "This app would like to add the photo library.",
},
},
}
将屏幕捕捉图像另存为 JPEG 文件到当前用户的“图片”文件夹中。
请注意,如果您计划将应用程序提交到 Mac App Store,它将被**沙盒化**。这意味着必须请求在“图片”文件夹中读取/写入文件的特殊权限。为此,只需在settings → osxbuild.settings 表中添加 entitlements 条目,如下所示。有关更多详细信息,请参阅 Apple 的 文档。
settings =
{
osx = {
entitlements = {
["com.apple.security.assets.pictures.read-write"] = true,
},
},
}
将屏幕捕捉图像另存为 PNG 文件到用户的我的图片我的图片\Corona Simulator我的图片\<AppName>
如果您需要在应用程序启动时捕捉显示对象,例如在执行 main.lua 初始化应用程序时,则必须在 timer.performWithDelay() 调用中调用 display.capture()。建议延迟至少 100 毫秒。
local myObject1 = display.newRect( 50, 50, 100, 150 )
local function captureWithDelay()
local capture = display.capture( myObject1 )
end
timer.performWithDelay( 100, captureWithDelay )
display.capture( displayObject, options )
显示对象. 引用要捕捉的显示对象/组的变量。
表. 捕捉选项的表 — 有关详细信息,请参阅下一节。
布尔值. 如果为 true,则将图像添加到设备的相册中
布尔值. 如果为 true,则会捕捉整个对象/组,即使屏幕上不可见的部分也会被捕捉。如果省略,捕捉将被限制在屏幕边界内。出于旧版兼容性目的,可以使用已弃用的 isFullResolution 选项名称,其效果相同。
display.capture( displayObject [, saveToPhotoLibrary] )
显示对象. 引用要捕捉的显示对象/组的变量。
布尔值. 如果为 true,则将图像添加到设备的相册中
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 )
-- Capture the entire group as a new display object
local combined = display.capture( group, { saveToPhotoLibrary=true, captureOffscreenArea=true } )
-- Position the new display object
combined.x, combined.y = 100, 100
-- Remove it
combined:removeSelf()
combined = nil