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、源码
如果还有不懂的可以直接下载源码