玩家死亡時,我已經(jīng)在游戲中捕獲了屏幕截圖.我正在按照以下代碼捕獲屏幕快照.
RenderTexture rt = new RenderTexture (800, 600, 24);
MainCamera.targetTexture = rt;
Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false);
MainCamera.Render ();
RenderTexture.active = rt;
texture.ReadPixels (new Rect (0, 0, 800, 600), 0, 0);
MainCamera.targetTexture = null;
RenderTexture.active = null;
Destroy (rt);
byte[] bytes = texture.EncodeToPNG ();
Directory.CreateDirectory (Application.persistentDataPath "/GameOverScreenShot");
File.WriteAllBytes (Application.persistentDataPath "/GameOverScreenShot" "/DiedScreenShot.png", bytes);
我正在使用以下代碼保存屏幕截圖.
byte[] bytes = File.ReadAllBytes (Application.persistentDataPath "/GameOverScreenShot" "/BirdDiedScreenShot.png");
Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false);
RectOffset tempOffset = new RectOffset (5, 5, 5, 5);
texture.filterMode = FilterMode.Trilinear;
texture.LoadImage (bytes);
Sprite sprite = Sprite.Create (texture, new Rect (0, 0, 800, 400), new Vector2 (0.5f, 0.0f), 2.0f);
ScreenShot_Image.GetComponent<Image> ().sprite = sprite;
現(xiàn)在,我想在Android應(yīng)用程序上共享此屏幕截圖.根據(jù)我的研究,我已經(jīng)獲得了以下代碼,但是它返回的是空白圖像.
//instantiate the class Intent
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
//instantiate the object Intent
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
//call setAction setting ACTION_SEND as parameter
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
//instantiate the class Uri
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
//instantiate the object Uri with the parse of the url's file
string destination = Application.persistentDataPath "/GameOverScreenShot" "/DiedScreenShot.png";
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse","file://" destination);
//call putExtra with the uri object of the file
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
//set the type of file
intentObject.Call<AndroidJavaObject>("setType", "image/*");
//instantiate the class UnityPlayer
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//instantiate the object currentActivity
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
//call the activity with our Intent
currentActivity.Call("startActivity", intentObject);
在這方面我應(yīng)該改變什么?請幫助,提前謝謝 解決方法: 只需調(diào)用takeScreenShotAndShare()即可截屏并共享它.如果您已經(jīng)有要共享的圖像,只需調(diào)用StartCoroutine(shareScreenshot(path));.并傳遞圖像的路徑/位置.這僅支持png圖像.要共享jpeg,請更改
intentObject.Call<AndroidJavaObject>("setType", "image/png");
至
intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");
整個代碼:
void takeScreenShotAndShare()
{
StartCoroutine(takeScreenshotAndSave());
}
private IEnumerator takeScreenshotAndSave()
{
string path = "";
yield return new WaitForEndOfFrame();
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
//Get Image from screen
screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenImage.Apply();
//Convert to png
byte[] imageBytes = screenImage.EncodeToPNG();
System.IO.Directory.CreateDirectory(Application.persistentDataPath "/GameOverScreenShot");
path = Application.persistentDataPath "/GameOverScreenShot" "/DiedScreenShot.png";
System.IO.File.WriteAllBytes(path, imageBytes);
StartCoroutine(shareScreenshot(path));
}
private IEnumerator shareScreenshot(string destination)
{
string ShareSubject = "Picture Share";
string shareLink = "Test Link" "\nhttps:///questions/36512784/share-image-on-android-application-from-unity-game";
string textToShare = "Text To share";
Debug.Log(destination);
if (!Application.isEditor)
{
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" destination);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), textToShare shareLink);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), ShareSubject);
intentObject.Call<AndroidJavaObject>("setType", "image/png");
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
currentActivity.Call("startActivity", intentObject);
}
yield return null;
}
來源:https://www./content-1-504951.html
|