我已经创建了一个简单的iphone应用程序,其中一个按钮来自UI,当我点击它时只执行一行代码。这是代码:
public void CaptureScreenShot()
{
Application.CaptureScreenshot ("Screenshot.png");
}
在我捕获一个屏幕截图后,内存增加了大约10 MB,然后只下降了7 MB
http://postimg.org/image/6r5tiaqjv/
当我拍摄第二张截图时,它上升了7 MB,但根本没有掉落,直到我翻转设备,然后它才会启动内存+ 3 MB
http://postimg.org/image/am4m74kbv/
然后,如果我想在行中拍摄2个截图,它会像+25 MB的起始内存一样上升,并在一段时间后下降2 MB
http://postimg.org/image/5yyk5cwyz/
即使我翻转设备,它也会降低2 MB,但它就像我启动设备时使用的内存的+ 20 MB。关键是,在拍摄至少一个屏幕截图后,我将永远无法获得回忆。 (我在开始时的记忆)
然后我决定尝试使用以下代码手动捕获屏幕截图:
public void TakeScreen()
{
// Timestamp returns the date, so each screenshot name would be unique
string pngFile = Application.persistentDataPath+"/+Timestamp+".png";
Texture2D texture = new Texture2D(Screen.width, Screen.height);
texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
texture.Apply();
byte[] bytes = texture.EncodeToPNG();
File.WriteAllBytes(pngFile,bytes);
DestroyObject( texture );
}
内存使用情况与Application.CaptureScreenshot()相同; 有人可以解释一下,我做错了什么,或者有没有办法避免这种内存泄漏? 当我尝试从WebCamTexture()中保存图片时遇到同样的问题:
public void TakeSnap ()
{
// Timestamp returns the date, so each screenshot name would be unique
string pngFile = Application.persistentDataPath+"/+Timestamp+".png";
Texture2D texture = new Texture2D(wct.width, wct.height);
texture.SetPixels32(wct.GetPixels32());
texture.Apply ();
var bytes = texture.EncodeToPNG();
File.WriteAllBytes( pngFile,bytes);
DestroyObject( texture );
}