Question

I'm using this code to create an Texture2D from the rendertexture of all cameras.

Code:

    var w = 256;
    var h = 256;
    var  cameras:Camera[] = Camera.allCameras;

    var renderTexture:RenderTexture = RenderTexture.GetTemporary(Screen.width, Screen.height, 24);
    RenderTexture.active = renderTexture;  

    for (var camera:Camera in cameras)
    {
        if (camera.enabled)
        {
            var fov:float = camera.fov;
            camera.targetTexture = renderTexture;
            camera.Render();
            camera.targetTexture = null;
            camera.fov = fov;
        }
    }

    var result:Texture2D = new Texture2D(w, h, TextureFormat.ARGB32, false);
    result.ReadPixels(Rect(0.0f, 0.0f, Screen.width, Screen.height), 0, 0, false);
    result.Apply();


    Application.ExternalCall("exportImage",System.Convert.ToBase64String(result.EncodeToPNG()));

It's working right on the webplayer, but when trying to convert this texture2d to base64 and sending to browser (by externalcall()) the result is a grey semitransparent image.

Any help would be greatly appreciated! Thanks.

Was it helpful?

Solution

I was able to post a screenshot to webplayer with:

using UnityEngine;
using System.Collections;

public class ScreenshotTest : MonoBehaviour {

    void Update () {
        if(Input.GetKeyDown(KeyCode.Space))
            StartCoroutine(Run());
    }


    IEnumerator Run() {
        yield return new WaitForEndOfFrame();

        Texture2D tex = new Texture2D(Screen.width, Screen.height);
        tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        tex.Apply();

        // to test the texture
        //  renderer.material.mainTexture = tex;

        // to save it as file, not available in webplayer
        //  System.IO.File.WriteAllBytes(Application.streamingAssetsPath+"/png.png", tex.EncodeToPNG());

        Application.ExternalCall("screenshot", System.Convert.ToBase64String(tex.EncodeToPNG()));
    }

}

and on the browser side:

function screenshot(base64) {
    console.log(base64);
    var img=document.createElement("img");
    img.alt="screenshot";
    img.src="data:image/png;base64,"+base64;
    document.body.appendChild(img);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top