2017-03-01 16 views
1

私は自分のアプリでそのコードを実装しているので、ユーザはスクリーンショットを撮って保存/共有できます。カメラボタンを押すとscreeshot機能はうまく機能しますが、ゲームボードで撮影したスクリーンショットが表示されません。UnityのUIにスクリーンショットの画像が表示されない

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

ソリューションギュンター・フォックスが言ったように:

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

    } 
+0

質問のいくつか:エラーが発生しますか?赤い疑問符はテクスチャなのか何もないのですか?印刷するためにLOAD IMAGEを取得しますか?シーンにPictureという名前の別のオブジェクトがありますか? – Everts

+0

こんにちは@Everts、私はエラーを取得し、私はロードイメージの印刷を見ることができますし、私のシーンで別の画像オブジェクトを持っていない – AND4011002849

答えて

1

を問題は、あなたがSpriteRendererMaterialTextureを設定しているということです。 the sprite propertyの設定にする必要があります。 this Unity doc on creating a Spriteをチェックアウトして、あなたの状況にその知識を適用することができます。

あなたのテクスチャをロードした後Spriteオブジェクトを作成し、spriteプロパティを変更するGetComponent<SpriteRenderer>を使用しています。 Materialsを変更する必要はありません。

+1

それは働いた!ありがとうございました! – AND4011002849

関連する問題