将Texture2D保存到文件无法正常工作

时间:2015-07-27 15:16:08

标签: c# unity3d io textures

所以我根据Unity网站上的Texture2D.EncodeToPNG代码示例创建了这个类。我执行它时没有收到任何错误,但我也没有看到创建的新文件。我在这里做错了什么?

public class CreateJPG : MonoBehaviour
{   
    public int width = 1050;
    public int height = 700;

    string fileName;
    string filePath;
    // Texture2D tex;

    public void GrabJPG () {
        SaveJPG();
        Debug.Log("GrabJPG Executing");
    }

    IEnumerator SaveJPG()
    {   
        // We should only read the screen buffer after rendering is complete
        yield return new WaitForEndOfFrame();

        // Create a texture the size of the screen, RGB24 format
        Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
        tex.ReadPixels(new Rect(0,0,width,height),0,0);
        tex.Apply();

        // Encode texture into JPG
        byte[] bytes = tex.EncodeToJPG(60);
        Object.Destroy(tex);

        // Get filePrefix from GameSetup array index
        GameObject init = GameObject.FindGameObjectWithTag("Initializer");
        GameSetup gameSetup = init.GetComponent<GameSetup>();
        string prefix = gameSetup.filePrefix;
        string subDir = gameSetup.subDir;

        string dtString = System.DateTime.Now.ToString("MM-dd-yyyy_HHmmssfff");
        fileName = prefix+dtString+".jpg";
        filePath = "/Users/kenmarold/Screenshots/"+subDir+"/";

        Debug.Log("SaveJPG Executing");

        File.WriteAllBytes(filePath+fileName, bytes);
        Debug.Log("Your file was saved at " + filePath+subDir+prefix+fileName);

        if(width > 0 && height > 0)
        {

        }
    } 
}

1 个答案:

答案 0 :(得分:0)

你没有开始你的协程,你需要在GrabJPG中致电StartCodoutine

StartCoroutine(SaveJPG());

https://docs.unity3d.com/Manual/Coroutines.html

https://unity3d.com/learn/tutorials/modules/intermediate/scripting/coroutines

P上。 S.顺便说一下,你可以使用Application.CaptureScreenshot