///
/// Copyright (c) 2023 MirzkisD1Ex0 All rights reserved.
/// Code Version 1.0
///
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Experimental.Rendering;
using UnityEngine.UI;
using System.IO;
using System;
using ToneTuneToolkit.Common;
namespace ToneTuneToolkit.Media
{
public class ScreenshotMaster : SingletonMaster
{
[SerializeField]
public int _textureHight = 1024, _textureWidth = 1024;
public Camera ShootingCamera;
public RawImage PreviewImage;
private RenderTexture _renderTexture;
private void Awake()
{
_renderTexture = InitRenderTexture();
SettingCamera(ShootingCamera);
if (PreviewImage)
{
PreviewImage.texture = _renderTexture;
}
}
///
/// 初始化RT
///
///
private RenderTexture InitRenderTexture()
{
RenderTexture _tempRenderTexture = new RenderTexture(_textureWidth, _textureHight, 16);
_tempRenderTexture.name = "TempRenderTexutre";
_tempRenderTexture.dimension = TextureDimension.Tex2D;
_tempRenderTexture.antiAliasing = 1;
_tempRenderTexture.graphicsFormat = GraphicsFormat.R16G16B16A16_SFloat;
return _tempRenderTexture;
}
///
/// 设置相机
///
///
private void SettingCamera(Camera tempCamera)
{
tempCamera.backgroundColor = Color.clear;
tempCamera.targetTexture = _renderTexture;
return;
}
public void SaveRenderTexture(string filePath, string fileName)
{
RenderTexture active = RenderTexture.active;
RenderTexture.active = _renderTexture;
Texture2D png = new Texture2D(_renderTexture.width, _renderTexture.height, TextureFormat.ARGB32, false);
png.ReadPixels(new Rect(0, 0, _renderTexture.width, _renderTexture.height), 0, 0);
png.Apply();
RenderTexture.active = active;
byte[] bytes = png.EncodeToPNG();
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
FileStream fs = File.Open(filePath + fileName, FileMode.Create);
BinaryWriter writer = new BinaryWriter(fs);
writer.Write(bytes);
writer.Flush();
writer.Close();
fs.Close();
Destroy(png);
png = null;
Debug.Log("保存成功!" + filePath);
return;
}
}
}