首先介绍下Application.persistentDataPath,这个是返回Andrio客户端专门为APP保存素材的文件夹,在PC会保存到C盘文件夹下,PC可以使用Application.dataPath保存到根目录
C#单例类,不需要挂载到场景,一共有三个方法
Texture ReadTexture(string path) 读取素材文件夹下的参数一的图片文件转换成Texture类型返回值(RawImage使用)
PrintCameraAndSave(Camera camera,string path) 截取相机的内容并保存到素材文件夹下
Texture PrintCamera(Camera camera) 截取相机的内容并作为Texture类型返回值返回
除此之外更新了很多方法,不过都大同小异。
下面是代码:
using System;
using UnityEngine;
using System.IO;
public class TextureManager
{
private static TextureManager main;
public static TextureManager Main
{
get
{
if (main == null)
{
main = new TextureManager();
}
return main;
}
}
// private string texturePath = Application.dataPath;
private string texturePath = Application.persistentDataPath;
public string Path
{
get { return texturePath; }
}
public string GetTexturePath(string path)
{
return texturePath + "/" + path + ".png";
}
public void DeleteTexture(string path)
{
File.Delete(texturePath + "/" + path + ".png");
}
public Texture2D ReadTexture(string path)
{
FileStream stream;
try
{
stream = new FileStream(texturePath + "/" + path + ".png",FileMode.Open,FileAccess.ReadWrite);
}
catch
{
Debug.LogError(path + ",地址下没有图片");
return null;
}
byte[] bb = new byte[stream.Length];
stream.Read(bb, 0, bb.Length);
Texture2D t = new Texture2D(1,1);
t.LoadImage(bb);
stream.Close();
return t;
}
public byte[] ByteRead(string path)
{
FileStream stream = new FileStream(texturePath + "/" + path + ".png",FileMode.OpenOrCreate,FileAccess.ReadWrite);
byte[] bb = new byte[stream.Length];
stream.Read(bb, 0, bb.Length);
stream.Close();
return bb;
}
public void SaveTexture2D(byte[] bb,string path)
{
FileStream stream = new FileStream(texturePath + "/" + path + ".png",FileMode.OpenOrCreate,FileAccess.ReadWrite);
stream.Write(bb, 0, bb.Length);
stream.Close();
}
public void PrintCameraAndSave(Camera camera,string path)
{
bool randerCamera = camera.targetTexture != null;
RenderTexture render = GetRander(camera);
if(!randerCamera){camera.targetTexture = render;}
camera.Render();
RenderTexture.active = render;
Texture2D t = new Texture2D(render.width,render.height);
t.ReadPixels(new Rect(0,0,render.width,render.height),0,0);
t.Apply();
if(!randerCamera){camera.targetTexture = null;}
RenderTexture.active = null;
FileStream stream = new FileStream(texturePath + "/" + path + ".png",FileMode.OpenOrCreate,FileAccess.ReadWrite);
byte[] bb = t.EncodeToPNG();
stream.Write(bb, 0, bb.Length);
stream.Close();
}
public Texture2D PrintCamera(Camera camera)
{
bool randerCamera = camera.targetTexture != null;
RenderTexture render = GetRander(camera);
if(!randerCamera){camera.targetTexture = render;}
camera.Render();
RenderTexture.active = render;
Texture2D t = new Texture2D(render.width,render.height);
t.ReadPixels(new Rect(0,0,render.width,render.height),0,0);
t.Apply();
if(!randerCamera){camera.targetTexture = null;}
RenderTexture.active = null;
return t;
}
public byte[] PrintCameraReturnByte(Camera camera)
{
bool randerCamera = camera.targetTexture != null;
RenderTexture render = GetRander(camera);
if(!randerCamera){camera.targetTexture = render;}
camera.Render();
RenderTexture.active = render;
Texture2D t = new Texture2D(render.width,render.height);
t.ReadPixels(new Rect(0,0,render.width,render.height),0,0);
t.Apply();
if(!randerCamera){camera.targetTexture = null;}
RenderTexture.active = null;
return t.EncodeToPNG();
}
public void SaveTexture(Texture2D texture,string path)
{
FileStream stream = new FileStream(texturePath + "/" + path + ".png",FileMode.OpenOrCreate,FileAccess.ReadWrite);
byte[] bb = texture.EncodeToPNG();
stream.Write(bb, 0, bb.Length);
stream.Close();
}
public Texture2D PrintCameraSaveAndReturn(Camera camera,string path)
{
bool randerCamera = camera.targetTexture != null;
RenderTexture render = GetRander(camera);
if(!randerCamera){camera.targetTexture = render;}
camera.Render();
RenderTexture.active = render;
Texture2D t = new Texture2D(render.width,render.height);
t.ReadPixels(new Rect(0,0,render.width,render.height),0,0);
t.Apply();
if(!randerCamera){camera.targetTexture = null;}
RenderTexture.active = null;
FileStream stream = new FileStream(texturePath + "/" + path + ".png",FileMode.OpenOrCreate,FileAccess.ReadWrite);
byte[] bb = t.EncodeToPNG();
stream.Write(bb, 0, bb.Length);
stream.Close();
return t;
}
private RenderTexture GetRander(Camera camera)
{
RenderTexture render;
if (camera.targetTexture != null)
{
render = camera.targetTexture;
}
else
{
render = Resources.Load<RenderTexture>("RenderTexture");
if (render == null)
{
render = new RenderTexture(Screen.width,Screen.height,0);
}
}
return render;
}
}