2016-07-30 28 views
0

Hilf mir Jungs, ich erstelle Augmented Reality (Einheit + Vuforia). Ich habe Knopf für Screenshot-Bildschirm, ist Arbeit aber Speicherort auf (/Data/Data/com.companyname.gamename/Files). Wie ändere ich den Ordner? (Speicher/emuliert/0/DCIM/Kamera /).Q: Auf Android-Handy, wie man Ordner wechseln

using UnityEngine; 
using System.Collections; 
using System.IO; 
public class SnapshotShare : MonoBehaviour 
{ 
    private AndroidUltimatePluginController androidUltimatePluginController; 
    Camera mainCamera; 
    RenderTexture renderTex; 
    Texture2D screenshot; 
    Texture2D LoadScreenshot; 
    int width = Screen.width; 
    int height = Screen.height; 
    string fileName; 
    string screenShotName = "Animal3D_"; 

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

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

    public IEnumerator CaptureScreen() 
    { 
     yield return null; 
     GameObject.Find ("Canvas").GetComponent<Canvas>().enabled = false; 
     yield return new WaitForEndOfFrame(); 
     if (Screen.orientation == ScreenOrientation.Portrait || Screen.orientation == ScreenOrientation.PortraitUpsideDown) { 
      mainCamera = Camera.main.GetComponent<Camera>(); 
      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(); 
      RenderTexture.active = null; 
      mainCamera.targetTexture = null; 
     } 
     if (Screen.orientation == ScreenOrientation.LandscapeLeft || Screen.orientation == ScreenOrientation.LandscapeRight) { 
      mainCamera = Camera.main.GetComponent<Camera>(); 
      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; 
     } 
     File.WriteAllBytes (Application.persistentDataPath + "/" +screenShotName+Time.frameCount+".jpg", screenshot.EncodeToJPG()); 
     GameObject.Find ("Canvas").GetComponent<Canvas>().enabled = true; 
    } 

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

    public void close() 
    { 
     Application.Quit(); 
    } 
} 

Antwort

0

Nahm von here (more details) und here (discussion).

Ich schlage vor, Sie Ihre aufgenommenen Screenshot in App Lage (/Data/Data/com.companyname.gamename/Files) zu speichern und dann File.Move(source, dest) verwenden, um es zu bewegen:

if(Shot_Taken == true) 
{ 
    string Origin_Path = System.IO.Path.Combine(Application.persistentDataPath, Screen_Shot_File_Name); 
    // This is the path of my folder. 
    string Path = "/mnt/sdcard/DCIM/Inde/" + Screen_Shot_File_Name; 
    if(System.IO.File.Exists(Origin_Path)) 
    { 
     System.IO.File.Move(Origin_Path, Path); 
     Shot_Taken = false; 
    } 
} 
+0

Danke, seine gearbeitet. Aber das Bild erscheint nicht in meiner Galerie, wie kann es erscheinen? Stimmt etwas nicht mit dem Format des Bildes? (das Bildformat, das ich verwendet habe, ist PNG) –

+0

Ich denke, es ist ein Thema für eine andere Frage;) –