547 lines
17 KiB
C#
547 lines
17 KiB
C#
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
using System.Collections;
|
|||
|
|
|||
|
using System.IO;
|
|||
|
using Module.Log;
|
|||
|
|
|||
|
public class ImageManagerRoot : UIControllerBase<ImageManagerRoot>
|
|||
|
{
|
|||
|
#region
|
|||
|
|
|||
|
public static void ShowImageCutStatic(CuttedPhoto callBack)
|
|||
|
{
|
|||
|
UIManager.ShowUI(UIInfo.ImageManagerRoot, (sucess, param) =>
|
|||
|
{
|
|||
|
ImageManagerRoot.Instance()._CuttedPhotoCallback = callBack;
|
|||
|
ImageManagerRoot.Instance().SelectCuttedPhote();
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
public static void ShowImageCameraStatic(CuttedPhoto callBack)
|
|||
|
{
|
|||
|
UIManager.ShowUI(UIInfo.ImageManagerRoot, (sucess, param) =>
|
|||
|
{
|
|||
|
ImageManagerRoot.Instance()._CuttedPhotoCallback = callBack;
|
|||
|
ImageManagerRoot.Instance().SelectWebCamTexture();
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
public void Start()
|
|||
|
{
|
|||
|
SetInstance(this);
|
|||
|
|
|||
|
InitReciver();
|
|||
|
}
|
|||
|
|
|||
|
public void Close()
|
|||
|
{
|
|||
|
UIManager.CloseUI(UIInfo.ImageManagerRoot);
|
|||
|
}
|
|||
|
|
|||
|
public void Update()
|
|||
|
{
|
|||
|
CameraUpdate();
|
|||
|
UpdateLoadImage();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region load image
|
|||
|
|
|||
|
|
|||
|
void InitReciver()
|
|||
|
{
|
|||
|
var uiGO = GameObject.Find("UI Root");
|
|||
|
var imageReciver = uiGO.GetComponent<ImageSelectReciver>();
|
|||
|
if (imageReciver == null)
|
|||
|
imageReciver = uiGO.AddComponent<ImageSelectReciver>();
|
|||
|
imageReciver._ImageSelectTool = this;
|
|||
|
}
|
|||
|
|
|||
|
public void SelectCuttedPhote()
|
|||
|
{
|
|||
|
_CamPanel.SetActive(false);
|
|||
|
_CutImgPanel.SetActive(false);
|
|||
|
//gameObject.SetActive(true);
|
|||
|
//InitReciver();
|
|||
|
_OrgPhoto = null;
|
|||
|
_OrgPhotoImage.texture = null;
|
|||
|
int maxSize = Screen.width * 2;
|
|||
|
maxSize = Mathf.Min(2560, maxSize);
|
|||
|
#if UNITY_IPHONE && !UNITY_EDITOR
|
|||
|
|
|||
|
//调用插件自带接口,拉取相册,内部有区分平台
|
|||
|
NativeGallery.Permission permission = NativeGallery.GetImageFromGallery((path) =>
|
|||
|
{
|
|||
|
Debug.Log("Image path: " + path);
|
|||
|
if (path != null)
|
|||
|
{
|
|||
|
// 此Action为选取图片后的回调,返回一个Texture2D
|
|||
|
Texture2D texture = NativeGallery.LoadImageAtPath(path, maxSize);
|
|||
|
if (texture == null)
|
|||
|
{
|
|||
|
Debug.Log("Couldn't load texture from " + path);
|
|||
|
return;
|
|||
|
}
|
|||
|
_OrgPhoto = texture;
|
|||
|
Debug.Log(texture.name);
|
|||
|
//var readableTex = duplicateTexture(texture);
|
|||
|
//ShowImageCut(readableTex);
|
|||
|
}
|
|||
|
}, "选择图片", "image/png", maxSize);
|
|||
|
|
|||
|
Debug.Log("Permission result: " + permission);
|
|||
|
|
|||
|
#elif UNITY_ANDROID && !UNITY_EDITOR
|
|||
|
|
|||
|
NativeGallery.Permission permission = NativeGallery.GetImageFromGallery((path) =>
|
|||
|
{
|
|||
|
Debug.Log("Image path: " + path);
|
|||
|
if (path != null)
|
|||
|
{
|
|||
|
// 此Action为选取图片后的回调,返回一个Texture2D
|
|||
|
Texture2D texture = NativeGallery.LoadImageAtPath(path, maxSize);
|
|||
|
if (texture == null)
|
|||
|
{
|
|||
|
Debug.Log("Couldn't load texture from " + path);
|
|||
|
return;
|
|||
|
}
|
|||
|
_OrgPhoto = texture;
|
|||
|
Debug.Log(texture.name);
|
|||
|
//var readableTex = duplicateTexture(texture);
|
|||
|
//ShowImageCut(readableTex);
|
|||
|
}
|
|||
|
}, "选择图片", "image/png", maxSize);
|
|||
|
|
|||
|
Debug.Log("Permission result: " + permission);
|
|||
|
#else
|
|||
|
LoadWindFile.LoadImage(GetImagePath);
|
|||
|
#endif
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
private Texture2D duplicateTexture(Texture2D source)
|
|||
|
{
|
|||
|
RenderTexture renderTex = RenderTexture.GetTemporary(
|
|||
|
source.width,
|
|||
|
source.height,
|
|||
|
0,
|
|||
|
RenderTextureFormat.Default,
|
|||
|
RenderTextureReadWrite.Linear);
|
|||
|
|
|||
|
Graphics.Blit(source, renderTex);
|
|||
|
RenderTexture previous = RenderTexture.active;
|
|||
|
RenderTexture.active = renderTex;
|
|||
|
Texture2D readableText = new Texture2D(source.width, source.height);
|
|||
|
readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0);
|
|||
|
readableText.Apply();
|
|||
|
RenderTexture.active = previous;
|
|||
|
RenderTexture.ReleaseTemporary(renderTex);
|
|||
|
return readableText;
|
|||
|
}
|
|||
|
|
|||
|
public void GetImagePath(string path)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(path))
|
|||
|
return;
|
|||
|
|
|||
|
GuiTextDebug.debug("GetImagePath:" + path);
|
|||
|
StartCoroutine(LoadLocalImage(path));
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateLoadImage()
|
|||
|
{
|
|||
|
if (_OrgPhoto != null && _OrgPhotoImage.texture == null)
|
|||
|
{
|
|||
|
var readableTex = duplicateTexture(_OrgPhoto);
|
|||
|
ShowImageCut(readableTex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
IEnumerator LoadLocalImage(string fileName)
|
|||
|
{
|
|||
|
string filePath = "";
|
|||
|
#if UNITY_IPHONE && !UNITY_EDITOR
|
|||
|
filePath = "file://" + fileName;
|
|||
|
#elif UNITY_ANDROID && !UNITY_EDITOR
|
|||
|
filePath = "file://" + fileName;
|
|||
|
#else
|
|||
|
filePath = "file://" + fileName;
|
|||
|
#endif
|
|||
|
|
|||
|
string exName = Path.GetExtension(fileName);
|
|||
|
exName = exName.ToLower();
|
|||
|
if (!exName.Equals(".jpg") && !exName.Equals(".png"))
|
|||
|
{
|
|||
|
LogModule.ErrorLog("Img file:" + fileName + ", load error");
|
|||
|
GUIData.AddNotifyData("#{39030}");
|
|||
|
yield break;
|
|||
|
}
|
|||
|
|
|||
|
WWW wwwTexture = new WWW(filePath);
|
|||
|
|
|||
|
LogModule.DebugLog(wwwTexture.url);
|
|||
|
|
|||
|
yield return wwwTexture;
|
|||
|
|
|||
|
if (!string.IsNullOrEmpty(wwwTexture.error))
|
|||
|
{
|
|||
|
GUIData.AddNotifyData("#{39031}");
|
|||
|
LogModule.ErrorLog("LoadImageError:" + wwwTexture.error + ", " + fileName);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var texture2d = wwwTexture.texture;
|
|||
|
ShowImageCut(texture2d);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region camera image
|
|||
|
|
|||
|
public GameObject _CamPanel;
|
|||
|
public RawImage _CameraTexture;
|
|||
|
private WebCamTexture _WebCamTexture;
|
|||
|
|
|||
|
public void SelectWebCamTexture()
|
|||
|
{
|
|||
|
StartCoroutine(StartWebCam());
|
|||
|
}
|
|||
|
|
|||
|
public void CameraUpdate()
|
|||
|
{
|
|||
|
if (_WebCamTexture != null)
|
|||
|
{
|
|||
|
if (Screen.orientation == ScreenOrientation.LandscapeRight)
|
|||
|
{
|
|||
|
_CameraTexture.transform.rotation = Quaternion.Euler(0, 0, 180);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_CameraTexture.transform.rotation = Quaternion.Euler(0, 0, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public IEnumerator StartWebCam()
|
|||
|
{
|
|||
|
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
|
|||
|
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
|
|||
|
{
|
|||
|
WebCamDevice[] devices = WebCamTexture.devices;
|
|||
|
if (devices.Length == 0)
|
|||
|
{
|
|||
|
GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{39023}"));
|
|||
|
Close();
|
|||
|
yield break;
|
|||
|
}
|
|||
|
_CamPanel.gameObject.SetActive(true);
|
|||
|
var deviceName = devices[0].name;
|
|||
|
_WebCamTexture = new WebCamTexture(deviceName, Screen.width, Screen.height, 12);
|
|||
|
_WebCamTexture.Play();
|
|||
|
_CameraTexture.texture = _WebCamTexture;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{39023}"));
|
|||
|
Close();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void OnBtnCameraOk()
|
|||
|
{
|
|||
|
Texture2D bla = new Texture2D(_WebCamTexture.width, _WebCamTexture.height);
|
|||
|
if (Screen.orientation == ScreenOrientation.LandscapeRight)
|
|||
|
{
|
|||
|
for (int i = 0; i < _WebCamTexture.width; ++i)
|
|||
|
{
|
|||
|
for (int j = 0; j < _WebCamTexture.height; ++j)
|
|||
|
{
|
|||
|
bla.SetPixel(i, j, _WebCamTexture.GetPixel(_WebCamTexture.width - i, _WebCamTexture.height - j));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (int i = 0; i < _WebCamTexture.width; ++i)
|
|||
|
{
|
|||
|
for (int j = 0; j < _WebCamTexture.height; ++j)
|
|||
|
{
|
|||
|
bla.SetPixel(i, j, _WebCamTexture.GetPixel(i, j));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
bla.Apply();
|
|||
|
|
|||
|
if (bla != null)
|
|||
|
{
|
|||
|
ShowImageCut(bla);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Close();
|
|||
|
}
|
|||
|
|
|||
|
_CamPanel.gameObject.SetActive(false);
|
|||
|
_WebCamTexture.Stop();
|
|||
|
_WebCamTexture = null;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region cutted image
|
|||
|
|
|||
|
public GameObject _CutImgPanel;
|
|||
|
public RawImage _OrgPhotoImage;
|
|||
|
public Vector2 _CutSize;
|
|||
|
|
|||
|
private int _ScollImageXMin;
|
|||
|
private int _ScollImageXMax;
|
|||
|
private int _ScollImageYMin;
|
|||
|
private int _ScollImageYMax;
|
|||
|
private Texture2D _OrgPhoto;
|
|||
|
|
|||
|
public delegate void CuttedPhoto(Texture2D cuttedImg);
|
|||
|
public CuttedPhoto _CuttedPhotoCallback;
|
|||
|
|
|||
|
private Vector2 _TextureOrgSize;
|
|||
|
private float _LargeRate;
|
|||
|
private float _SmallRate;
|
|||
|
private float _CurRate;
|
|||
|
|
|||
|
private static float _MaxOrgSizeRate = 2f;
|
|||
|
private static float _SizeStep = 0.1f;
|
|||
|
|
|||
|
public void ShowImageCut(Texture2D orgPhoto)
|
|||
|
{
|
|||
|
if (orgPhoto == null)
|
|||
|
{
|
|||
|
Close();
|
|||
|
return;
|
|||
|
}
|
|||
|
_CutImgPanel.SetActive(true);
|
|||
|
_OrgPhoto = orgPhoto;
|
|||
|
_OrgPhotoImage.texture = orgPhoto;
|
|||
|
_OrgPhotoImage.color = new Color(1, 1, 1);
|
|||
|
//_OrgPhotoImage.texture = orgPhoto;
|
|||
|
_OrgPhotoImage.rectTransform.sizeDelta = new Vector2(orgPhoto.width, orgPhoto.height);
|
|||
|
_OrgPhotoImage.rectTransform.anchoredPosition = Vector2.zero;
|
|||
|
|
|||
|
_TextureOrgSize = new Vector2(orgPhoto.width, orgPhoto.height);
|
|||
|
Debug.Log("_TextureOrgSize:" + _TextureOrgSize);
|
|||
|
//最大放大倍数,原图的2.5倍或屏幕的两倍;缩小倍数,cutSizeX
|
|||
|
if (_TextureOrgSize.x > _TextureOrgSize.y)
|
|||
|
{
|
|||
|
_LargeRate = Mathf.Min(_MaxOrgSizeRate, Screen.width * 2 / _TextureOrgSize.x);
|
|||
|
_LargeRate = Mathf.Max(_CutSize.x / _TextureOrgSize.x, _LargeRate);
|
|||
|
|
|||
|
_SmallRate = _CutSize.y / _TextureOrgSize.y;
|
|||
|
|
|||
|
if (_TextureOrgSize.x > Screen.width)
|
|||
|
{
|
|||
|
_CurRate = Screen.width / _TextureOrgSize.x;
|
|||
|
}
|
|||
|
else if (_TextureOrgSize.y < _CutSize.y)
|
|||
|
{
|
|||
|
_CurRate = _TextureOrgSize.y / _CutSize.y;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_CurRate = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_LargeRate = Mathf.Min(_MaxOrgSizeRate, Screen.height * 2 / _TextureOrgSize.y);
|
|||
|
_LargeRate = Mathf.Max(_CutSize.y / _TextureOrgSize.y, _LargeRate);
|
|||
|
|
|||
|
_SmallRate = _CutSize.x / _TextureOrgSize.x;
|
|||
|
|
|||
|
if (_TextureOrgSize.y > Screen.height)
|
|||
|
{
|
|||
|
_CurRate = Screen.height / _TextureOrgSize.y;
|
|||
|
}
|
|||
|
else if (_TextureOrgSize.x < _CutSize.x)
|
|||
|
{
|
|||
|
_CurRate = _TextureOrgSize.x / _CutSize.x;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_CurRate = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (_LargeRate < _SmallRate)
|
|||
|
{
|
|||
|
_LargeRate = _SmallRate;
|
|||
|
}
|
|||
|
|
|||
|
_CurRate = Mathf.Clamp(_CurRate, _SmallRate, _LargeRate);
|
|||
|
|
|||
|
_OrgPhotoImage.rectTransform.sizeDelta = new Vector2(_TextureOrgSize.x * _CurRate, _TextureOrgSize.y * _CurRate);
|
|||
|
Debug.Log("LargeRate:" + _LargeRate + ", SmallRate:" + _SmallRate + ", CurRate:" + _CurRate);
|
|||
|
|
|||
|
Resize();
|
|||
|
}
|
|||
|
|
|||
|
public void Resize()
|
|||
|
{
|
|||
|
_ScollImageXMin = (int)(-(_TextureOrgSize.x * _CurRate * 0.5f - _CutSize.x * 0.5f));
|
|||
|
_ScollImageXMax = (int)(-_ScollImageXMin);
|
|||
|
if (_TextureOrgSize.x * _CurRate < _CutSize.x)
|
|||
|
{
|
|||
|
_ScollImageXMin = 0;
|
|||
|
_ScollImageXMax = 0;
|
|||
|
}
|
|||
|
|
|||
|
_ScollImageYMin = (int)(-(_TextureOrgSize.y * _CurRate * 0.5f - _CutSize.y * 0.5f));
|
|||
|
_ScollImageYMax = (int)(-_ScollImageYMin);
|
|||
|
if (_TextureOrgSize.y * _CurRate < _CutSize.y)
|
|||
|
{
|
|||
|
_ScollImageYMin = 0;
|
|||
|
_ScollImageYMax = 0;
|
|||
|
}
|
|||
|
|
|||
|
Debug.Log("_ScollImageYMin:" + _ScollImageXMin + "," + _ScollImageYMin);
|
|||
|
}
|
|||
|
|
|||
|
public void ScollImage(Vector2 direct)
|
|||
|
{
|
|||
|
var modifyDirect = direct;
|
|||
|
|
|||
|
Vector2 newAnchorPos = _OrgPhotoImage.rectTransform.anchoredPosition + modifyDirect;
|
|||
|
newAnchorPos.x = Mathf.Clamp(newAnchorPos.x, _ScollImageXMin, _ScollImageXMax);
|
|||
|
newAnchorPos.y = Mathf.Clamp(newAnchorPos.y, _ScollImageYMin, _ScollImageYMax);
|
|||
|
_OrgPhotoImage.rectTransform.anchoredPosition = newAnchorPos;
|
|||
|
}
|
|||
|
|
|||
|
public void CutImage()
|
|||
|
{
|
|||
|
/*var cameraTexture = RenderTexturePool.Instance.GetRenderTexture(new Vector2(1280, 760));
|
|||
|
var mainCamera = UIManager.Instance().UICamera;
|
|||
|
Texture2D readableText = new Texture2D(cameraTexture.width, cameraTexture.height);
|
|||
|
if (mainCamera != null)
|
|||
|
{
|
|||
|
var temp = mainCamera.targetTexture;
|
|||
|
mainCamera.targetTexture = cameraTexture;
|
|||
|
var mainCameraState = mainCamera.enabled;
|
|||
|
mainCamera.enabled = true;
|
|||
|
mainCamera.Render();
|
|||
|
|
|||
|
RenderTexture.active = cameraTexture;
|
|||
|
readableText.ReadPixels(new Rect(0, 0, cameraTexture.width, cameraTexture.height), 0, 0);
|
|||
|
readableText.Apply();
|
|||
|
|
|||
|
mainCamera.enabled = mainCameraState;
|
|||
|
mainCamera.targetTexture = temp;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
Debug.Log("readableText:" + readableText.width + "," + readableText.height);
|
|||
|
|
|||
|
int cutSizeX = (int)_CutSize.x;
|
|||
|
int cutSizeY = (int)_CutSize.y;
|
|||
|
Texture2D rectPhoto = new Texture2D(cutSizeX, cutSizeY, TextureFormat.ARGB32, true);
|
|||
|
int startPosx = (int)(readableText.width * 0.5f - cutSizeX * 0.5f);
|
|||
|
int startPosY = (int)(readableText.height * 0.5f - cutSizeY * 0.5f);
|
|||
|
//int startPosx = 0;
|
|||
|
//int startPosY = 0;
|
|||
|
for (int i = 0; i < cutSizeX; ++i)
|
|||
|
{
|
|||
|
for (int j = 0; j < cutSizeY; ++j)
|
|||
|
{
|
|||
|
var color = readableText.GetPixel(i + startPosx, j + startPosY);
|
|||
|
rectPhoto.SetPixel(i, j, color);
|
|||
|
//LogModule.DebugLog("Color:" + color);
|
|||
|
}
|
|||
|
}*/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
int cutSizeX = Mathf.Min((int)_CutSize.x, _OrgPhoto.width);
|
|||
|
int cutSizeY = Mathf.Min((int)_CutSize.y, _OrgPhoto.height);
|
|||
|
if (cutSizeX > cutSizeY)
|
|||
|
{
|
|||
|
cutSizeX = cutSizeY;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
cutSizeY = cutSizeX;
|
|||
|
}
|
|||
|
|
|||
|
int cutPosX = (int)-((_OrgPhotoImage.rectTransform.anchoredPosition.x + _ScollImageXMin) / _CurRate);
|
|||
|
int cutPosY = (int)-((_OrgPhotoImage.rectTransform.anchoredPosition.y + _ScollImageYMin) / _CurRate);
|
|||
|
LogModule.DebugLog("CutPos:" + cutPosX + "," + cutPosY);
|
|||
|
|
|||
|
LogModule.DebugLog("CutSize:" + cutSizeX + "," + cutSizeY);
|
|||
|
Texture2D rectPhoto = new Texture2D(cutSizeX, cutSizeY, TextureFormat.ARGB32, true);
|
|||
|
for (int i = 0; i < cutSizeX; ++i)
|
|||
|
{
|
|||
|
for (int j = 0; j < cutSizeY; ++j)
|
|||
|
{
|
|||
|
if (cutSizeX < _OrgPhoto.width && cutSizeY < _OrgPhoto.height)
|
|||
|
{
|
|||
|
var color = _OrgPhoto.GetPixel((int)(i / _CurRate + cutPosX), (int)(j / _CurRate + cutPosY));
|
|||
|
rectPhoto.SetPixel(i, j, color);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var color = _OrgPhoto.GetPixel((int)(i + cutPosX), (int)(j + cutPosY));
|
|||
|
rectPhoto.SetPixel(i, j, color);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
rectPhoto.Apply();
|
|||
|
|
|||
|
if (_CuttedPhotoCallback != null)
|
|||
|
{
|
|||
|
_CuttedPhotoCallback.Invoke(rectPhoto);
|
|||
|
}
|
|||
|
Close();
|
|||
|
|
|||
|
//StartCoroutine(ApplyCuttedTexture(rectPhoto));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public void OnBtnTextureExpend()
|
|||
|
{
|
|||
|
_CurRate += _SizeStep;
|
|||
|
_CurRate = Mathf.Clamp(_CurRate, _SmallRate, _LargeRate);
|
|||
|
|
|||
|
_OrgPhotoImage.rectTransform.sizeDelta = new Vector2(_TextureOrgSize.x * _CurRate, _TextureOrgSize.y * _CurRate);
|
|||
|
|
|||
|
Resize();
|
|||
|
ScollImage(Vector2.zero);
|
|||
|
}
|
|||
|
|
|||
|
public void OnBtnTextureNarrow()
|
|||
|
{
|
|||
|
_CurRate -= _SizeStep;
|
|||
|
_CurRate = Mathf.Clamp(_CurRate, _SmallRate, _LargeRate);
|
|||
|
_OrgPhotoImage.rectTransform.sizeDelta = new Vector2(_TextureOrgSize.x * _CurRate, _TextureOrgSize.y * _CurRate);
|
|||
|
|
|||
|
Resize();
|
|||
|
ScollImage(Vector2.zero);
|
|||
|
}
|
|||
|
|
|||
|
private IEnumerator ApplyCuttedTexture(Texture2D rectPhoto)
|
|||
|
{
|
|||
|
yield return new WaitForEndOfFrame();
|
|||
|
|
|||
|
rectPhoto.Apply();
|
|||
|
|
|||
|
if (_CuttedPhotoCallback != null)
|
|||
|
{
|
|||
|
_CuttedPhotoCallback.Invoke(rectPhoto);
|
|||
|
}
|
|||
|
gameObject.SetActive(false);
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|