Texture2D to Base64 - Unity3D 웹 플레이어
-
21-12-2019 - |
문제
이 코드를 사용하여 모든 카메라의 RenderTexture에서 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()));
.
WebPlayer에서 바로 작동하지만이 Texture2D를 Base64로 변환하고 브라우저로 전송하려고 시도 할 때 결과는 회색 반투명 이미지입니다.
도움이 크게 감사 할 것입니다!고마워.
해결책
ibplayer에 스크린 샷을 게시 할 수있었습니다.
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);
}
. 제휴하지 않습니다 StackOverflow