分享一个屏幕截取的小功能,笔者这里给出自由截屏的基本方案。
一、创建一个供截屏的Canvas
创建屏幕背景:
创建一个ShowImage作为自由截屏区域
整体结构如下
二、创建脚本
脚本的整体思路就是先获取屏幕大小,之后在当前屏幕范围内获取你所需要的截屏大小,最后显示,以下是代码:
private void Start()
{
StartCoroutine(CaptureGUIPNG());
}
//截取后用来显示的Iamge
public Image ShowImage;
Texture2D _screenShot;
//定义一个协程
IEnumerator CaptureGUIPNG()
{ //WaitForEndOfFrame在OnGUI之后执行
yield return new WaitForEndOfFrame();
RectTransform rect = ShowImage.GetComponent<RectTransform>();
_screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGBA32, false);
var width = rect.sizeDelta.x;
var height = rect.sizeDelta.y;
var startx = rect.position.x - (width / 2) * rect.localScale.x;
var starty = rect.position.y - (height / 2) * rect.localScale.y;
_screenShot.ReadPixels(new Rect(startx, starty, width, height), 0, 0);
_screenShot.Apply();
Sprite sp = Sprite.Create(_screenShot,new Rect(0,0, width, height), new Vector2(0.5f, 0.5f), 100.0f);
ShowImage.sprite = sp;
yield return null;
ShowImage.color = Color.white;
}
运行结果如下,可以明显看到所框选的区域截屏成功:
最后,如果这篇文章帮助到你,请点个赞吧!