拍照后如何释放GPU RAM内存达到~1000张照片时,我的电脑卡住了,因为我使用了所有的GPU RAM现在我正在使用下面的代码来创建照片:
IEnumerator takePhoto(字符串文件名( { yield return new WaitForEndOfFrame((;
// Debug.Log(gameObject.name + " Save Color Photo");
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
//Get Image from screen
screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenImage.Apply();
if(resolution == Resolution.Half)
{
screenImage = Utils.Resize(screenImage, Screen.width / 2, Screen.height / 2);
// screenImage.Apply();
}
//Convert to png
byte[] imageBytes = screenImage.EncodeToPNG();
//Save image to file
System.IO.File.WriteAllBytes(filename + "_scene.png", imageBytes);
}
Textur2D
是一个 Unity 对象,这意味着它将在脚本范围之外持久存在(它存在于场景中(。 要么使用单例模式,这样你只需要内存中的一个纹理块,要么你需要Destroy
它:
//Save image to file
System.IO.File.WriteAllBytes(filename + "_scene.png", imageBytes);
// Destroy Textur2D Object
Destroy(screenImage);
}
就个人而言,我推荐单例模式:
// Create texture as class-level field, outside of function
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
IEnumerator takePhoto(string filename) { yield return new WaitForEndOfFrame();
// Debug.Log(gameObject.name + " Save Color Photo");
//Get Image from screen
screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenImage.Apply();