using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using UnityEngine;
using Debug = UnityEngine.Debug;
public class Capture : MonoBehaviour
{
//需要截屏的图片
public RectTransform rectTransform;
public void OnImageCapture()
{
StartCoroutine(ImageCapture());
}
IEnumerator ImageCapture()
{
yield return new WaitForEndOfFrame();
Rect rect = RectTransformToScreenSpace(rectTransform);
RenderTexture.active = null;
var width = (int)rect.width;
var height = (int)rect.height;
var tex = new Texture2D(width, height, TextureFormat.RGBA32, false);
tex.ReadPixels(rect, 0, 0);
tex.Apply();
var bytes = tex.EncodeToPNG();
var dir = Path.Combine(Application.dataPath, "CaptureDir");
Directory.CreateDirectory(dir);
File.WriteAllBytes(Path.Combine(dir, $"Capture-{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.png"), bytes);
if (Directory.Exists(dir))
{
Process.Start(dir);
}
else
{
Debug.LogError("Directory does not exist: " + dir);
}
Destroy(tex);
}
private Rect RectTransformToScreenSpace(RectTransform transform)
{
Vector3[] corners = new Vector3[4];
transform.GetWorldCorners(corners);
Vector2 min = RectTransformUtility.WorldToScreenPoint(null, corners[0]);
Vector2 max = RectTransformUtility.WorldToScreenPoint(null, corners[2]);
return new Rect(min.x, min.y, max.x - min.x, max.y - min.y);
}
}