Texture2D a Base64 - Unity3D Player Web
-
21-12-2019 - |
Pregunta
Estoy usando este código para crear una textura2D de la RENDERTEXTURE DE TODAS LAS CAMERAS.
Código:
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()));
Está funcionando justo en el webplayer, pero al intentar convertir esta textura2D a BASE64 y enviar al navegador (por ExternalCall ()), el resultado es una imagen semitransparente gris.
¡Cualquier ayuda sería muy apreciada!Gracias.
Solución
pude publicar una captura de pantalla para webplayer con:
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()));
}
}
y en el lado del navegador:
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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow