Unity3D编写脚本从屏幕截取一个子区域保存为Texture2D,用于保存图片和当贴图都可以

GameObject UserCutBox;  // 用于描述截取范围
Texture2D fullscreenCapture ;
Texture2D subarea;
void Start()
    {
        rcttrans = GameObject.Find("UserCutBox").GetComponent<RectTransform>();
    }

// 开始j截取屏幕(全屏)
public void startSnapShotFullScreen()
    {
        StartCoroutine(CaptureFullScreenData(OnCaptureFullEnd));
    }

private IEnumerator CaptureFullScreenData(Action<object> onEnd=null)
    {
        yield return new WaitForEndOfFrame();
        Texture2D texture = ScreenCapture.CaptureScreenshotAsTexture();
        onEnd?.Invoke(texture);
    }
// 全屏截图结束的回调
public void OnCaptureFullEnd(object data)
    {
        // 保存全屏截屏
        fullscreenCapture = (Texture2D)data;

        // 开始身体截屏
        StartCoroutine(CaptureByRect(new Rect(rcttrans.offsetMin, rcttrans.offsetMax - rcttrans.offsetMin), OnCaptureSubAreaEnd));
    }

// 根据一个Rect类型来截取指定范围的屏幕  
private IEnumerator CaptureByRect(Rect mRect, Action<object> onend=null)
    {
        //等待渲染线程结束  
        yield return new WaitForEndOfFrame();

        //初始化Texture2D  
        Texture2D mTexture = new Texture2D((int)mRect.width, (int)mRect.height, TextureFormat.RGB24, false);

        //读取屏幕像素信息并存储为纹理数据  
        mTexture.ReadPixels(mRect, 0, 0);
        mTexture.Apply();

        onend(mTexture);
    }

// 子区域截屏结束
public void OnCaptureSubAreaEnd(object data)
{
    subarea = (Texture2D)data;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值