0

所以我只是想快速了解如何从基于浏览器的应用程序将屏幕截图上传到 Web 服务器。由于我无法将文件保存在本地然后上传,是否需要将其存储在纹理变量中?我对此的基础知识有些困惑,但我只是想指出正确的方向。我使用指向本地文件位置的字符串变量研究在线地址的所有内容,但这不适用于基于浏览器的应用程序,对吗?只是寻找一些关于如何开始为此构建 POC 的指导。谢谢您的帮助。

我所知道的:我可以截屏(但现在我只知道如何将其保存到本地)我可以上传文件(但只能从本地路径)

大问题:如何仅将屏幕截图保存在内存中?不确定这是否甚至是正确的问题,但我希望有人知道我想要了解的内容。

最终我想要做的是截取屏幕截图,然后将其直接保存到 mysql 服务器。

4

1 回答 1

0

Texture2D.EncodeToPNG 的 Unity 帮助页面有一个完整的示例,用于捕获和上传屏幕截图。

http://docs.unity3d.com/ScriptReference/Texture2D.EncodeToPNG.html

// Saves screenshot as PNG file.
using UnityEngine;
using System.Collections;
using System.IO;

public class PNGUploader : MonoBehaviour {
    // Take a shot immediately
    IEnumerator Start () {
        yield return UploadPNG();
    }

    IEnumerator UploadPNG() {
        // 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
        int width = Screen.width;
        int height = Screen.height;
        Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);

        // Read screen contents into the texture
        tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
        tex.Apply();

        // Encode texture into PNG
        byte[] bytes = tex.EncodeToPNG();
        Object.Destroy(tex);

        // For testing purposes, also write to a file in the project folder
        // File.WriteAllBytes(Application.dataPath + "/../SavedScreen.png", bytes);


        // Create a Web Form
        WWWForm form = new WWWForm();
        form.AddField("frameCount", Time.frameCount.ToString());
        form.AddBinaryData("fileUpload",bytes);

        // Upload to a cgi script
        WWW w = new WWW("http://localhost/cgi-bin/env.cgi?post", form);
        yield return w;

        if (w.error != null) {
            Debug.Log(w.error);
        } else {
            Debug.Log("Finished Uploading Screenshot");
        }
    }

}
于 2015-07-20T11:41:13.680 回答