gpt4 book ai didi

android - 屏幕截图图像未显示在 Unity UI 上

转载 作者:行者123 更新时间:2023-11-30 00:41:17 27 4
gpt4 key购买 nike

我已经在我的应用程序中实现了该代码,因此用户可以截取屏幕截图并保存/共享,当我按下相机按钮时,屏幕截图功能可以正常工作,但加载功能不行,我看不到在我的游戏对象上截取的屏幕截图。

enter image description here

using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.UI;

public class SnapshotShare : MonoBehaviour
{
private AndroidUltimatePluginController androidUltimatePluginController;
Camera mainCamera;
RenderTexture renderTex;
Texture2D screenshot;
Texture2D LoadScreenshot;
int width = Screen.width; // for Taking Picture
int height = Screen.height; // for Taking Picture
string fileName;
string screenShotName = "PictureShare.png";

void Start ()
{
androidUltimatePluginController = AndroidUltimatePluginController.GetInstance ();

}

public void Snapshot ()
{
StartCoroutine (CaptureScreen ());
}

public IEnumerator CaptureScreen ()
{
yield return null; // Wait till the last possible moment before screen rendering to hide the UI

GameObject.Find ("Canvas").GetComponent<Canvas> ().enabled = false;
yield return new WaitForEndOfFrame (); // Wait for screen rendering to complete
if (Screen.orientation == ScreenOrientation.Portrait || Screen.orientation == ScreenOrientation.PortraitUpsideDown) {
mainCamera = Camera.main.GetComponent<Camera> (); // for Taking Picture
renderTex = new RenderTexture (width, height, 24);
mainCamera.targetTexture = renderTex;
RenderTexture.active = renderTex;
mainCamera.Render ();
screenshot = new Texture2D (width, height, TextureFormat.RGB24, false);
screenshot.ReadPixels (new Rect (0, 0, width, height), 0, 0);
screenshot.Apply (); //false
RenderTexture.active = null;
mainCamera.targetTexture = null;


}
if (Screen.orientation == ScreenOrientation.LandscapeLeft || Screen.orientation == ScreenOrientation.LandscapeRight) {
mainCamera = Camera.main.GetComponent<Camera> (); // for Taking Picture
renderTex = new RenderTexture (height, width, 24);
mainCamera.targetTexture = renderTex;
RenderTexture.active = renderTex;
mainCamera.Render ();
screenshot = new Texture2D (height, width, TextureFormat.RGB24, false);
screenshot.ReadPixels (new Rect (0, 0, height, width), 0, 0);
screenshot.Apply (); //false
RenderTexture.active = null;
mainCamera.targetTexture = null;

}
// on Win7 - C:/Users/Username/AppData/LocalLow/CompanyName/GameName
// on Android - /Data/Data/com.companyname.gamename/Files
File.WriteAllBytes (Application.persistentDataPath + "/" + screenShotName, screenshot.EncodeToPNG ());

// on Win7 - it's in project files (Asset folder)
//File.WriteAllBytes (Application.dataPath + "/" + screenShotName, screenshot.EncodeToPNG ());
//File.WriteAllBytes ("picture1.png", screenshot.EncodeToPNG ());
//File.WriteAllBytes (Application.dataPath + "/../../picture3.png", screenshot.EncodeToPNG ());
//Application.CaptureScreenshot ("picture2.png");
GameObject.Find ("Canvas").GetComponent<Canvas> ().enabled = true; // Show UI after we're done
LoadImage();

}

public void ShareImage ()
{
string path = Application.persistentDataPath + "/" + screenShotName;
androidUltimatePluginController.ShareImage("subject","Teste de compartilhamento",path);

}

public void LoadImage ()
{
string path = Application.persistentDataPath + "/" + screenShotName;
byte[] bytes;
bytes = System.IO.File.ReadAllBytes(path);
LoadScreenshot = new Texture2D(90,90);
LoadScreenshot.LoadImage(bytes);
GameObject.Find("Picture").GetComponent<Renderer> ().material.mainTexture = LoadScreenshot;
Debug.Log("LOAD IMAGE");
}

public void close ()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}

Gunther Fox 所说的解决方案:

 public void LoadImage()
{

string path = Application.persistentDataPath + "/" + screenShotName;
byte[] bytes;
bytes = System.IO.File.ReadAllBytes(path);
LoadScreenshot = new Texture2D(4, 4);
LoadScreenshot.LoadImage(bytes);
Sprite sprite = Sprite.Create(screenshot, new Rect(0, 0, width, height), new Vector2(0.5f, 0.0f), 1.0f);

GameObject.Find("Picture").GetComponent<SpriteRenderer>().sprite = sprite;

Debug.Log("LOAD IMAGE");

}

最佳答案

问题是您正在设置 TextureMaterialSpriteRenderer 上;你应该设置 the sprite property .查看this Unity doc on creating a Sprite 然后您可以将这些知识应用到您的情况中:

创建一个 Sprite加载纹理后的对象,然后使用 GetComponent<SpriteRenderer>更改 sprite属性(property)。您不必更改任何 Materials .

关于android - 屏幕截图图像未显示在 Unity UI 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540351/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com