using UnityEngine;
using UVC.Log;
namespace UVC.Extension
{
///
/// RenderTexture È®Àå ¸Þ¼µå¸¦ Á¦°øÇϴ Ŭ·¡½ºÀÔ´Ï´Ù.
///
public static class RenderTextureEx
{
///
/// RenderTexture¸¦ Texture2D·Î º¯È¯ÇÕ´Ï´Ù.
///
/// º¯È¯ÇÒ RenderTexture °´Ã¼
/// º¯È¯µÈ Texture2D °´Ã¼
///
/// »ç¿ë ¿¹½Ã:
///
/// // RenderTexture »ý¼º
/// RenderTexture renderTexture = new RenderTexture(256, 256, 24);
///
/// // Ä«¸Þ¶ó¿¡¼ renderTexture¿¡ ·»´õ¸µ
/// Camera.main.targetTexture = renderTexture;
/// Camera.main.Render();
///
/// // RenderTexture¸¦ Texture2D·Î º¯È¯
/// Texture2D texture2D = renderTexture.ToTexture2D();
///
/// // »ç¿ë ÈÄ Á¤¸®
/// Camera.main.targetTexture = null;
/// Camera.main.ResetAspect();
///
///
public static Texture2D ToTexture2D(this RenderTexture renderTexture)
{
Texture2D texture2D = new Texture2D(renderTexture.width, renderTexture.height);
RenderTexture.active = renderTexture;
texture2D.ReadPixels(new UnityEngine.Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
texture2D.Apply();
return texture2D;
}
///
/// RenderTexture¸¦ ¹ÙÀÌÆ® ¹è¿·Î º¯È¯ÇÕ´Ï´Ù.
///
/// º¯È¯ÇÒ RenderTexture °´Ã¼
/// À̹ÌÁö Çü½Ä (±âº»°ª: PNG)
/// ¹ÙÀÌÆ® ¹è¿
///
/// »ç¿ë ¿¹½Ã:
///
/// RenderTexture rt = new RenderTexture(256, 256, 24);
/// byte[] bytes = rt.ToBytes();
/// File.WriteAllBytes("screenshot.png", bytes);
///
///
public static byte[] ToBytes(this RenderTexture renderTexture, TextureFormat format = TextureFormat.RGBA32)
{
Texture2D texture2D = renderTexture.ToTexture2D();
byte[] bytes = texture2D.EncodeToPNG();
Object.Destroy(texture2D);
return bytes;
}
///
/// RenderTexture¸¦ ÁöÁ¤µÈ °æ·Î¿¡ PNG ÆÄÀÏ·Î ÀúÀåÇÕ´Ï´Ù.
///
/// ÀúÀåÇÒ RenderTexture °´Ã¼
/// ÀúÀåÇÒ ÆÄÀÏ °æ·Î
/// ¼º°ø ¿©ºÎ
///
/// »ç¿ë ¿¹½Ã:
///
/// RenderTexture rt = new RenderTexture(256, 256, 24);
/// Camera.main.targetTexture = rt;
/// Camera.main.Render();
/// bool success = rt.SaveToPNG("Assets/Screenshots/screenshot.png");
/// Camera.main.targetTexture = null;
///
///
public static bool SaveToPNG(this RenderTexture renderTexture, string filePath)
{
try
{
byte[] bytes = renderTexture.ToBytes();
System.IO.File.WriteAllBytes(filePath, bytes);
return true;
}
catch (System.Exception e)
{
ULog.Error($"RenderTexture¸¦ PNG·Î ÀúÀåÇÏ´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù: {e.Message}", e);
return false;
}
}
///
/// RenderTextureÀÇ Å©±â¸¦ Á¶Á¤ÇÕ´Ï´Ù.
///
/// ¿øº» RenderTexture
/// »õ ³Êºñ
/// »õ ³ôÀÌ
/// Å©±â°¡ Á¶Á¤µÈ »õ·Î¿î RenderTexture
///
/// »ç¿ë ¿¹½Ã:
///
/// RenderTexture originalRT = new RenderTexture(1024, 1024, 24);
/// RenderTexture resizedRT = originalRT.Resize(512, 512);
/// // »ç¿ë ÈÄ Á¤¸®
/// resizedRT.Release();
/// originalRT.Release();
///
///
public static RenderTexture Resize(this RenderTexture renderTexture, int width, int height)
{
RenderTexture resized = new RenderTexture(width, height, renderTexture.depth);
Graphics.Blit(renderTexture, resized);
return resized;
}
}
}