This function works only on uncompressed, non-HDR texture formats. Texture.isReadable must be true.
The encoded PNG data will contain alpha channel for RGBA32, ARGB32 textures, and no alpha channel for RGB24 textures. For single-channel red textures ( R8, R16, RFloat and RHalf ), the encoded PNG data will be in grayscale. PNG data will not contain gamma correction or color profile information.
// Saves screenshot as PNG file.usingUnityEngine;
usingUnityEngine.Networking;
usingSystem.Collections;
usingSystem.IO;
publicclassPNGUploader : MonoBehaviour
{
// Take a shot immediately IEnumerator Start()
{
yieldreturn UploadPNG();
}
IEnumerator UploadPNG()
{
// We should only read the screen buffer after rendering is completeyieldreturnnew WaitForEndOfFrame();
// Create a texture the size of the screen, RGB24 formatint 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 PNGbyte[] 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 scriptvar w = UnityWebRequest.Post("http://localhost/cgi-bin/env.cgi?post", form);
yieldreturn w.SendWebRequest();
if (w.result != UnityWebRequest.Result.Success)
{
Debug.Log(w.error);
}
else {
Debug.Log("Finished Uploading Screenshot");
}
}
}