unity中按下快捷键获取截图,并在截图上加上水印

最近项目需要在unity中大量截图来写方案,于是就有了这样一个快速截图的需求,就研究了一下,给大家写下来,顺便加深以下理解。话不多说,直接开始。

    public Texture2D Watermark;//水印
    public Camera m_mainCamera;//主摄像机
    public string m_targetDirectory;  //储存目录
    public int m_targetWidth = 1920; //默认生成图片的大小
    public int m_targetHeight = 1080;
 

 public IEnumerator Capture()   
    {
        RenderTexture rt = new RenderTexture(m_targetWidth, m_targetHeight, 24);
        m_mainCamera.targetTexture = rt;
        Texture2D screenShot = new Texture2D(m_targetWidth, m_targetHeight, TextureFormat.RGB24, false);
        m_mainCamera.Render();
        RenderTexture.active = rt;
        screenShot.ReadPixels(new Rect(0, 0, m_targetWidth, m_targetHeight), 0, 0);
        m_mainCamera.targetTexture = null;
        RenderTexture.active = null; // JC: added to avoid errors
        Destroy(rt);
        //加水印
       screenShot= AddWatermark(screenShot,Watermark);

        //获取到图片之后则将其保存下来
        yield return new WaitForEndOfFrame();  //使用协程的原因后
        byte[] byt = screenShot.EncodeToPNG();
        string filename = ScreenShotName(m_targetWidth, m_targetHeight);
        using (Stream stream = File.Create(filename))
        {
            stream.Write(byt, 0, byt.Length);
            stream.Close();   //文件读写后记得将其关闭,以免出现进程占用的问题
            stream.Dispose(); 
            AssetDatabase.Refresh();//刷新文件夹

        }

public Texture2D AddWatermark(Texture2D background, Texture2D watermark)
    {
        int startX = background.width - watermark.width - 10;
        int endX = startX + watermark.width;
        //int startY = background.height - watermark.height - 20;
        int startY = 8;
        int endY = startY + watermark.height;

        for (int x = startX; x < endX; x++)
        {
            for (int y = startY; y < endY; y++)
            {
                Color bgColor = background.GetPixel(x, y);
                Color wmColor = watermark.GetPixel(x - startX, y - startY);
                Color final_color = Color.Lerp(bgColor, wmColor, wmColor.a / 1.0f);
                background.SetPixel(x, y, final_color);
            }
        }
        background.Apply();
        return background;

    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值