Texture2D to base64 - Unity3d Веб-плеер

Я использую этот код для создания Texture2D из текстуры рендеринга всех камер.

Код:

    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()));

Он работает прямо в веб-плеере, но при попытке преобразовать эту texture2d в base64 и отправить в браузер (с помощью externalcall()), получается серое полупрозрачное изображение.

Любая помощь будет принята с благодарностью! Благодарю.

1 ответ

Решение

Я смог опубликовать скриншот для веб-плеера с:

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()));
    }

}

и на стороне браузера:

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);
}
Другие вопросы по тегам