概述
Godot4.3中更新了一些关于剪贴板的方法,获取图片赫然在列,这意味着可以在自己的应用中创建诸如粘贴截图的功能。
这些方法被包含在DisplaySever
单例中,有兴趣的戈友可以自己去翻一下文档。或许可以实现Godot版本的屏幕截图工具。
相关类图
Godot4.3中剪贴板相关的内容主要涉及DisplaySever
单例和TextEdit
控件,以及DisplaySever
单例中的一个枚举。
测试
因为只是简单测试下方法的功能,所以搭建的场景也很简单:
- 添加一个
TextEdit
控件用于显示剪贴板的文本内容 - 添加一个
TextureRect
控件用于显示剪贴板的图片内容 - 添加一个
Button
控件,用于触发粘贴的动作,并判断剪贴板内的是文本还是图片,然后选择将剪贴板内容显示在TextEdit
控件还是TextureRect
控件
另外还需要设置一下TextureRect
控件,以便更好的显示图片:
- 设定其
expand_mode
为保持宽度不变
测试代码
extends Control
@onready var textedit: TextEdit = $TextEdit
@onready var texture_rect: TextureRect = $TextureRect
func _on_button_pressed() -> void:
# 判断剪贴板中有无 - 文字内容
if DisplayServer.clipboard_has():
textedit.text = DisplayServer.clipboard_get() # 显示到TextEdit控件中
# 判断剪贴板中有无 - 图片内容
if DisplayServer.clipboard_has_image():
var img = DisplayServer.clipboard_get_image() # 获取Image
var tex = ImageTexture.create_from_image(img) # 构造ImageTexture
texture_rect.texture = tex # 显示到TextureRect控件中
可以看到,单击按钮时:
- 会首先会通过
DisplayServer.clipboard_has()
判断剪贴板中有无文字内容,如果有就用DisplayServer.clipboard_get()
获取文字内容,并显示到TextEdit
控件中 - 或者通过
DisplayServer.clipboard_has_image()
判断有无图片内容,如果有就用DisplayServer.clipboard_get_image()
获取图片的Image
类型实例,然后通过构造ImageTexture
,就可以直接赋值到TextureRect
控件的texture
属性显示图片
运行效果:
可以看到能够正确根据剪贴板的内容类型进行粘贴和显示了。
这意味着基于Godot4.3版本开发的应用程序,已经可以实现粘贴截图的功能了。