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