将图像加载为Texture2D
本文关键字:Texture2D 加载 图像 | 更新日期: 2023-09-27 18:00:53
在我的程序中,我想保存一些屏幕截图,然后加载它们来计算一些东西。我创建了一种计算图像名称的方法:
static public string generatePhotoName (string cameraName, float time)
{
return "G:/Data/unity/cameraDemo/" +
DataController.measurmentPath +
"/photos" + "/" +
cameraName + "/" +
time.ToString () + "_" + cameraName + ".png";
}
这对于保存来说很好,但当我尝试加载图像时,File.Exists (filePath)
会返回false
。
但当我硬编码文件路径时,加载也很好:
static public string generatePhotoName (string cameraName, float time)
{
return "G:/Data/unity/cameraDemo/demo/photos/Camera/test.png";
}
它甚至适用于"真实"图像名称(即3.827817_Camera.png(。
使用Path.Combine(...)
并将"/"更改为"''"并没有改变任何内容。。。
//编辑:这是我的装载方法
static public Texture2D loadPhotoToTexture (string filePath)
{
Texture2D tex = null;
byte[] fileData;
if (File.Exists (filePath)) {
fileData = File.ReadAllBytes (filePath);
tex = new Texture2D (2, 2);
tex.LoadImage (fileData); //..this will auto-resize the texture dimensions.
} else {
Debug.Log (filePath + " does not exist");
}
return tex;
}`
//edit2:更多代码
这就是我所说的方法Texture2D photo = DataController.loadPhotoToTexture(photoData.getFileName ());
这是我的PhotoData
public class PhotoData : BaseData
{
private string _cameraName;
public string cameraName {
get { return _cameraName; }
set { _cameraName = value; }
}
private float _time;
public float time {
get { return _time; }
set { _time = value; }
}
public PhotoData ()
{
}
public PhotoData (string cameraName, float time)
{
_cameraName = cameraName;
_time = time;
}
public string getFileName ()
{
return PlayerController.generatePhotoName (_cameraName, _time);
}
}
问题是,我试图在一个Update()
调用中保存和加载屏幕截图。
我把它改为右键点击保存屏幕截图,左键点击加载屏幕截图。
如果您想将图像存储到磁盘上的某个文件中,而不是存储在游戏文件夹结构中,请执行以下操作:创建一个文件夹,并存储其位置(文件路径(。例如:
string screenshotFileName = time.ToString () + "_" + cameraName + ".png"
string screenshotDirectory;
screenshotDirectory = @"C:'someFolder'anotherFolder'";
try { Directory.CreateDirectory(directory); }
catch (Exception e)
{ //you should catch each exception separately
if (e is DirectoryNotFoundException || e is UnauthorizedAccessException)
Debug.LogError("OMG PANIC");
}
FileInfo filepath = new FileInfo(screenshotDirectory+screenshotFileName);
if(filepath.Exists)
{
//load the file
}
您也可以简单地创建一个具有相对路径的文件夹,该文件夹将与您的可执行文件位于同一文件夹中,方法是将screenshotDirectory更改为screenshotDirectory = @"screenshots'"+cameraName+@"'";
编辑:您似乎正确加载了纹理。是否将其指定给材质的主纹理?您的代码在哪里遇到问题?例如,如果您在希望应用纹理的同一对象上运行此脚本:
this.GetComponent<Renderer>().material.mainTexture = loadedTexture;
此外,当您想要加载图像时,最好使用Resources文件夹,该文件夹使用斜杠,而不是。在那里存储您可能希望在运行时加载的所有内容,并使用Resources.load((.