unity 自定义截图功能,支持PC和WEBGL,输出Sprite和base64

Unity自定义截图,可根据自己的需求,设置截图区域的大小位置,获取的自己想要的图片数据


1、截图代码

	private IEnumerator CaptureByRect(Rect _mRect)
	{
		//等待渲染线程结束  
		yield return new WaitForEndOfFrame();
		//初始化Texture2D  
		//Texture2D _texture = ScreenCapture.CaptureScreenshotAsTexture();
		Texture2D m_texture = new Texture2D((int)_mRect.width, (int)_mRect.height, TextureFormat.RGB24, false);
		//读取屏幕像素信息并存储为纹理数据  
		m_texture.ReadPixels(_mRect, 0, 0);
		m_texture.Apply();
		m_bytes = m_texture.EncodeToPNG();

		Sprite v_sprite = Sprite.Create(m_texture, new Rect(0, 0, m_texture.width, m_texture.height), Vector2.zero);
		string v_str_base64 = System.Convert.ToBase64String(m_bytes);

		if (myEventbase64 != null)
		{
			myEventbase64.Invoke(v_str_base64);
			myEventbase64 = null;
		}
		if (myEventSprite != null)
		{
			myEventSprite.Invoke(v_sprite);
			myEventSprite = null;
		}
	}

2、外调函数(需要转入Canvas和截图区域Image)

	public MyEventSprite GetSpriteByImg(Canvas _canvas, UnityEngine.UI.Image _img)
	{
		myEventSprite = new MyEventSprite();

		StartCoroutine(CaptureByRect(_canvas, _img));

		return myEventSprite;
	}

3、调用

    public Image mImgOutput;//输出图片
    public ScreenshotData screenshotData;//存储Canvas和截图区域Image

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            //截图输出Sprite
            Screenshots.Instance.GetSpriteByImg(screenshotData.mCanvas, screenshotData.mImg).AddListener((_spr) => {
                mImgOutput.sprite = _spr;
            });

            //截图输出Base64
            //Screenshots.Instance.GetBase64ByImg(screenshotData.mCanvas, screenshotData.mImg).AddListener((_base64) => {
            //    Debug.Log(_base64);
            //});

            //截图输出Base64和Sprite
            //Screenshots.Instance.GetBase64AndSpriteByImg(screenshotData.mCanvas, screenshotData.mImg).AddListener((_base64,_spr) => {
            //    mImgOutput.sprite = _spr;
            //    Debug.Log(_base64);
            //});
        }
    }

4、结果(第一张图是19201080,第二张图是1536864)
在这里插入图片描述
在这里插入图片描述
5、源码
如果还有不懂的可以直接下载源码

猜你喜欢

转载自blog.csdn.net/D_kkkk/article/details/130291595