效果
代码
using UnityEngine;
using System.Collections;
using System.IO;
public class CropPicture : MonoBehaviour
{
string localPath = "http://192.168.1.100:8080/picture/15.jpg";
Texture2D image;
Texture2D cutImage;
WWW www;
Rect rect;
float time;
Vector2 pos1;
Vector2 pos2;
// Use this for initialization
void Start()
{
StartCoroutine(LoadImage());
}
// Update is called once per frame
void Update()
{
//点击鼠标左键,记录第一个位置
if (Input.GetMouseButtonDown(0))
{
pos1 = Input.mousePosition;
time = Time.time;
if (time > 1f)
{
Debug.Log(pos1);
}
}
//放开左键记录第二个位置
if (Input.GetMouseButtonUp(0))
{
pos2 = Input.mousePosition;
Debug.Log(pos2);
StartCoroutine(CutImage());
time = 0;
}
}
void OnGUI()
{
//当下载完成
if (www.isDone)
{
GUI.DrawTexture(new Rect(0, 0, 600, 904), image);
}
GUI.Button(new Rect(0, 0, 100, 50), "W" + Screen.width + "H" + Screen.height);
if (pos1 != null)
{
GUI.Button(new Rect(0, 50, 150, 50), pos1.ToString());
}
if (pos2 != null)
{
GUI.Button(new Rect(0, 100, 150, 50), pos2.ToString());
}
if (cutImage != null)
{
GUI.Button(new Rect(0, 150, 150, 50), "image W" + cutImage.width + "H" + cutImage.height);
}
if (rect != null)
{
GUI.Button(new Rect(0, 200, 250, 50), rect.ToString());
}
}
//下载图片
IEnumerator LoadImage()
{
www = new WWW(localPath);
yield return www;
image = www.texture;
if (www.error != null)
{
Debug.Log(www.error);
}
}
//截图
IEnumerator CutImage()
{
//图片大小
cutImage = new Texture2D((int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y), TextureFormat.RGB24, true);
//坐标左下角为0
rect = new Rect((int)pos1.x, Screen.height - (int)(Screen.height - pos2.y), (int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y));
yield return new WaitForEndOfFrame();
cutImage.ReadPixels(rect, 0, 0, true);
cutImage.Apply();
yield return cutImage;
byte[] byt = cutImage.EncodeToPNG();
//保存截图Project面板下要创建StreamingAssets文件夹,保存文件后要刷新Project面板图片才会显示出来
File.WriteAllBytes(Application.streamingAssetsPath + "/CutImage.png", byt);
}
}
2016.5.7.17.34修改后的代码
using UnityEngine;
using System.Collections;
using System.IO;
using System;
public class CropPicture : MonoBehaviour
{
string localPath = "http://192.168.1.100:8080/picture/15.jpg";
Texture2D image;
Texture2D cutImage;
WWW www;
Rect rect;
float time;
Vector2 pos1;
Vector2 pos2;
// Use this for initialization
void Start()
{
StartCoroutine(LoadImage());
}
// Update is called once per frame
void Update()
{
//点击鼠标左键,记录第一个位置
if (Input.GetMouseButtonDown(0))
{
pos1 = Input.mousePosition;
time = Time.time;
if (time > 1f)
{
Debug.Log(pos1);
}
}
//放开左键记录第二个位置
if (Input.GetMouseButtonUp(0))
{
pos2 = Input.mousePosition;
Debug.Log(pos2);
StartCoroutine(CutImage());
time = 0;
}
}
void OnGUI()
{
//当下载完成
if (www.isDone)
{
GUI.DrawTexture(new Rect(0, 0, 600, 904), image);
}
GUI.Button(new Rect(0, 0, 100, 50), "W" + Screen.width + "H" + Screen.height);
if (pos1 != null)
{
GUI.Button(new Rect(0, 50, 150, 50), pos1.ToString());
}
if (pos2 != null)
{
GUI.Button(new Rect(0, 100, 150, 50), pos2.ToString());
}
if (cutImage != null)
{
GUI.Button(new Rect(0, 150, 150, 50), "image W" + cutImage.width + "H" + cutImage.height);
}
if (rect != null)
{
GUI.Button(new Rect(0, 200, 250, 50), rect.ToString());
}
}
//下载图片
IEnumerator LoadImage()
{
www = new WWW(localPath);
yield return www;
image = www.texture;
if (www.error != null)
{
Debug.Log(www.error);
}
}
//截图
IEnumerator CutImage()
{
//图片大小
cutImage = new Texture2D((int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y), TextureFormat.RGB24, true);
//坐标左下角为0
rect = new Rect((int)pos1.x, Screen.height - (int)(Screen.height - pos2.y), (int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y));
yield return new WaitForEndOfFrame();
cutImage.ReadPixels(rect, 0, 0, true);
cutImage.Apply();
yield return cutImage;
byte[] byt = cutImage.EncodeToPNG();
//保存截图
File.WriteAllBytes(Application.dataPath+ "/"+DateTime.Now.ToFileTime().ToString()+".png", byt);
}
}