Accessing the bytes[] from Application.CaptureScreenshot

I’m trying to access the bytes from a screenshot in order to upload it via WWW… What’s the right way to do this?

Is it possible to directly access the bytes from Application.CaptureScreenshot, without having to load it into a Texture2D?

It just writes the file to disk, the only way to get the bytes would be to read the resulting file into a byte array through a stream, like File.ReadAllBytes.

You can also use Texture2D.ReadPixels to copy from the screen, it’d probably be best to not write the file to disk at all if you don’t need to. There was an example of using it and uploading the result via WWW in the script reference so maybe give that a go instead.

IEnumerator UploadPNG() {
	yield return new WaitForEndOfFrame();
	int width = Screen.width;
	int height = Screen.height;
	Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
	tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
	byte[] bytes = tex.EncodeToPNG();
	WWWForm form = new WWWForm();
	form.AddField("frameCount", Time.frameCount.ToString());
	form.AddBinaryData("fileUpload", bytes);
	WWW w = new WWW("http://localhost/cgi-bin/env.cgi?post", form);
	yield return w;
	if (w.error != null)
		print("Finished Uploading Screenshot");