Files
AppleHillsProduction/Assets/External/SWAN Dev/ScreenshotHelper/Scenes/ScreenshotDemo.cs

224 lines
7.4 KiB
C#

/// <summary>
/// By SwanDEV 2017
/// </summary>
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
/// <summary>
/// Screenshot Helper example.
/// </summary>
public class ScreenshotDemo : DImageDisplayHandler // Inherits the image handler script, we use this handler to set the captured texture/sprite for displaying on the UI Image in this demo.
{
[Header("[ Save Settings ]")]
public FilePathName.SaveFormat saveFormat = FilePathName.SaveFormat.JPG;
[Header("[ Camera Capture (Camera Capture method example) ]")]
[Tooltip("Request Texture2D or RenderTexture?")]
public bool m_RequestTexture2D_CameraCapture = true;
public float m_Scale = 1f;
public int m_TaregtWidth, m_TargetHeight;
[Header("[ Capture Cutout (Capture screen with cutout area Example) ]")]
public Vector2 iCaptureRegionSize = new Vector2(512, 512);
[Header("[ Object References ]")]
public CanvasScaler canvasScaler;
public UnityEngine.UI.Image displayImage;
public Text debugText;
public InputField widthInputField;
public InputField heightInputField;
public MeshRenderer cubeMesh;
public Camera camera1;
public Camera camera2;
public Camera camera3;
private void Start()
{
// Check the max. texture size support by the current device GPU
Debug.Log("Max. texture size support by the current device GPU: " + SystemInfo.maxTextureSize);
// Set the anti-aliasing level (1, 2, 4, 8), 1 = disable; 8 = best quality.
ScreenshotHelper.AntiAliasingLevel = 8;
ScreenshotHelper.iSetMainOnCapturedCallback((Sprite sprite) =>
{
// Your Code to use the captured sprite..
SetImage(sprite);
cubeMesh.material.mainTexture = sprite.texture;
switch (saveFormat)
{
case FilePathName.SaveFormat.JPG:
SaveAsJPG(sprite.texture);
break;
case FilePathName.SaveFormat.PNG:
SaveAsPNG(sprite.texture);
break;
case FilePathName.SaveFormat.GIF:
#if PRO_GIF
// Require Pro GIF to save image(s) as GIF.
SaveAsGIF(sprite.texture);
#endif
break;
}
});
// Show screenshot helper debug message
ScreenshotHelper.Instance.m_DebugText = debugText;
OnInputChanges();
// Check screen orientation for setting canvas resolution
if(Screen.width > Screen.height)
{
canvasScaler.referenceResolution = new Vector2(1920, 1080);
}
else
{
canvasScaler.referenceResolution = new Vector2(1080, 1920);
}
}
private PointerEventData uiPointerEventData = new PointerEventData(EventSystem.current);
private List<RaycastResult> uiRaycastResuls = new List<RaycastResult>();
private bool _isPointedOnUI = false;
private void Update()
{
/*if(Input.GetMouseButtonDown(0))
{
uiPointerEventData.position = Input.mousePosition;
EventSystem.current.RaycastAll(uiPointerEventData, uiRaycastResuls);
_isPointedOnUI = (uiRaycastResuls.Count > 0)? true:false;
}
if(Input.GetMouseButtonUp(0))
{
if(!_isPointedOnUI)
{
ScreenshotHelper.iCapture(Input.mousePosition, iCaptureRegionSize, (texture2D) => {
// Your Code to use the captured texture..
Debug.Log("Touch to capture screen, result image size: " + texture2D.width + " x " + texture2D.height);
});
}
}*/
}
public void OnInputChanges()
{
int captureWidth = 512;
int.TryParse(widthInputField.text, out captureWidth);
int captureHeight = 512;
int.TryParse(heightInputField.text, out captureHeight);
iCaptureRegionSize = new Vector2(captureWidth, captureHeight);
}
public void CaptureScreen()
{
ScreenshotHelper.iCaptureScreen((texture2D)=>{
// Your Code to use the captured texture..
Debug.Log("iCaptureScreen - result image size: " + texture2D.width + " x " + texture2D.height);
});
}
public void CaptureWithCamera(Camera camera)
{
if (m_RequestTexture2D_CameraCapture)
{
if (m_Scale > 0)
{
// Capture with camera, request Texture2D of the specific scale:
ScreenshotHelper.iCaptureWithCamera(camera, m_Scale, (texture2D) =>
{
// Your Code to use the captured texture..
Debug.Log("1. iCaptureWithCamera - result image size: " + texture2D.width + " x " + texture2D.height);
});
}
else
{
// Capture with camera, request Texture2D of the specific Width and Height:
ScreenshotHelper.iCaptureWithCamera(camera, (texture2D) =>
{
// Your Code to use the captured texture..
Debug.Log("2. iCaptureWithCamera - result image size: " + texture2D.width + " x " + texture2D.height);
}, m_TaregtWidth, m_TargetHeight);
}
}
else
{
if (m_Scale > 0)
{
// Capture with camera, request RenderTexture of the specific scale:
ScreenshotHelper.iCaptureWithCamera_RenderTexture(camera, m_Scale, (renderTexture) =>
{
// Your Code to use the captured texture..
Debug.Log("3. iCaptureWithCamera - result image size: " + renderTexture.width + " x " + renderTexture.height);
});
}
else
{
// Capture with camera, request RenderTexture of the specific Width and Height:
ScreenshotHelper.iCaptureWithCamera_RenderTexture(camera, (renderTexture) =>
{
// Your Code to use the captured texture..
Debug.Log("4. iCaptureWithCamera - result image size: " + renderTexture.width + " x " + renderTexture.height);
}, m_TaregtWidth, m_TargetHeight);
}
}
}
private void SetImage(Sprite sprite)
{
base.Clear(displayImage); // Clear the previous texture (if any)
base.SetImage(displayImage, sprite); // Set the sprite to the UI Image, using the DImageDisplayHandler that inherited by this demo script.
}
public void Clear()
{
base.Clear(displayImage);
displayImage.rectTransform.sizeDelta = Vector2.zero;
ClearScreenshotHelper();
}
public void ClearScreenshotHelper()
{
ScreenshotHelper.iClear(clearCallback: false, clearTextures: true);
}
private void SaveAsJPG(Texture2D tex2D)
{
string debugMessage = "Saved_as_JPG_to:_" + new FilePathName().SaveTextureAs(tex2D, FilePathName.SaveFormat.JPG);
ScreenshotHelper.Instance.UpdateDebugText(debugMessage);
}
private void SaveAsPNG(Texture2D tex2D)
{
string debugMessage = "Saved_as_PNG_to:_" + new FilePathName().SaveTextureAs(tex2D, FilePathName.SaveFormat.PNG);
ScreenshotHelper.Instance.UpdateDebugText(debugMessage);
}
#if PRO_GIF
private void SaveAsGIF(Texture2D tex2D)
{
string debugMessage = "Saved as GIF to: " + new FilePathName().SaveTextureAs(tex2D, FilePathName.SaveFormat.GIF);
ScreenshotHelper.Instance.UpdateDebugText(debugMessage);
}
#endif
public void UnRegRenderCameras()
{
ScreenshotHelper.iUnRegisterAllRenderCameras();
}
public void MoreAssets()
{
Application.OpenURL("https://www.swanob2.com/assets");
}
}