초기 커밋.
This commit is contained in:
72
Assets/Scripts/UVC/util/ScreenCapture.cs
Normal file
72
Assets/Scripts/UVC/util/ScreenCapture.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace UVC.Util
|
||||
{
|
||||
/// <summary>
|
||||
/// 화면 캡처를 위한 유틸리티 클래스입니다.
|
||||
/// 지정된 카메라 또는 화면 전체를 캡처하여 Texture2D로 반환합니다.
|
||||
/// </summary>
|
||||
public static class ScreenCapture
|
||||
{
|
||||
/// <summary>
|
||||
/// 화면을 캡처하여 Texture2D로 반환합니다.
|
||||
/// 대상 카메라가 RenderTexture를 사용하는 경우 해당 크기로 캡처하며,
|
||||
/// 그렇지 않은 경우 화면 전체를 캡처합니다.
|
||||
/// </summary>
|
||||
/// <returns>캡처된 Texture2D 객체</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 화면 캡처 실행
|
||||
/// Texture2D capturedImage = ScreenCapture.GetScreenShot(GetComponent<Camera>());
|
||||
/// if (capturedImage != null)
|
||||
/// {
|
||||
/// Debug.Log("화면 캡처 성공!");
|
||||
/// // 캡처된 이미지를 파일로 저장하거나 UI에 표시 가능
|
||||
/// }
|
||||
/// else
|
||||
/// {
|
||||
/// Debug.LogError("화면 캡처 실패: 대상 카메라가 설정되지 않았습니다.");
|
||||
/// }
|
||||
/// </code>
|
||||
/// </example>
|
||||
public static Texture2D GetScreenShot(Camera camera)
|
||||
{
|
||||
if (camera == null) return null;
|
||||
|
||||
if (camera.targetTexture != null)
|
||||
{
|
||||
Texture2D screenShot = new Texture2D(camera.targetTexture.width, camera.targetTexture.height, TextureFormat.RGB24, false);
|
||||
screenShot.wrapMode = TextureWrapMode.Clamp;
|
||||
|
||||
RenderTexture rt = camera.targetTexture;
|
||||
camera.Render();
|
||||
|
||||
RenderTexture.active = rt;
|
||||
screenShot.ReadPixels(new Rect(0, 0, camera.targetTexture.width, camera.targetTexture.height), 0, 0);
|
||||
screenShot.Apply(false);
|
||||
RenderTexture.active = null;
|
||||
|
||||
return screenShot;
|
||||
}
|
||||
else
|
||||
{
|
||||
Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
|
||||
screenShot.wrapMode = TextureWrapMode.Clamp;
|
||||
|
||||
RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
|
||||
|
||||
camera.targetTexture = rt;
|
||||
camera.Render();
|
||||
camera.targetTexture = null;
|
||||
|
||||
RenderTexture.active = rt;
|
||||
screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
||||
screenShot.Apply(false);
|
||||
RenderTexture.active = null;
|
||||
|
||||
return screenShot;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user