Unity3d实现自由选中框并截图保存功能(一) 自由选中框实现

Unity3d实现自由选中框并截图保存功能(一) 自由选中框实现

前言

我们日常也会经常用到截图功能,这里我们就将截图的功能做入unity开发的程序内。这里我先实现自由选择框的功能。

最终效果

在这里插入图片描述

实现思路

将一个带透明的image节点作为选中框表示;
按下鼠标左键记录选中框起始位置,并将选中框设置在其实位置;

移动鼠标后,根据鼠标位置更新image的宽、高值,已经中心点(Pivot)。

功能实现

UI搭建

UI较简单就是个image节点:

在这里插入图片描述

鼠标按下

这个的话,直接在update函数内监听输入的GetMouseButtonDown即可:

  if (Input.GetMouseButtonDown(0))
        {
            Vector2 position;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(Canvas, Input.mousePosition, null, out position);
            StartPos = position;
            SelImg.anchoredPosition = position;
        }

这里的重点是将屏幕的坐标转换到canvas的坐标是使用
RectTransformUtility.ScreenPointToLocalPointInRectangle函数来实现。

同步选择框

在鼠标移动的过程中,获取鼠标位置,然后更新选中框的中心点和长宽属性。

if (Input.GetMouseButton(0))
        {
            Vector2 position;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(Canvas, Input.mousePosition, null, out position);
            SelImg.pivot = new Vector2(position.x >= StartPos.x ? 0 : 1, position.y >= StartPos.y ? 0 : 1);
            SelImg.sizeDelta = new Vector2(Mathf.Abs(position.x - StartPos.x), Mathf.Abs(position.y - StartPos.y));
        }

完成

这个功能是比较简单的,下一篇进行截图保存的功能。

Unity3d实现自由选中框并截图保存功能(二)截图保存功能

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用OpenCV库来实现视频截取和保存。下面是一个示例代码,演示如何使用OpenCV来选一个区域进行视频截取并展示保存: ```python import cv2 # 打开视频文件 video = cv2.VideoCapture('input_video.mp4') # 检查视频是否成功打开 if not video.isOpened(): print("无法打开视频文件") exit() # 读取第一帧 ret, frame = video.read() # 创建窗口并设置鼠标回调函数 cv2.namedWindow('Video') cv2.imshow('Video', frame) # 定义区域选择回调函数 def select_region(event, x, y, flags, param): global frame, roi_start, roi_end, selecting if event == cv2.EVENT_LBUTTONDOWN: roi_start = (x, y) selecting = True elif event == cv2.EVENT_LBUTTONUP: roi_end = (x, y) selecting = False # 绘制矩形 cv2.rectangle(frame, roi_start, roi_end, (0, 255, 0), 2) cv2.imshow('Video', frame) # 初始化变量 roi_start = (0, 0) roi_end = (0, 0) selecting = False # 设置鼠标回调函数 cv2.setMouseCallback('Video', select_region) while True: # 读取视频帧 ret, frame = video.read() # 检查是否成功读取帧 if not ret: break # 显示当前帧 cv2.imshow('Video', frame) # 等待按键事件 key = cv2.waitKey(1) & 0xFF # 按下 'q' 键退出循环 if key == ord('q'): break # 按下 's' 键保存选定区域的图像 if key == ord('s') and not selecting: # 截取选定区域 roi = frame[roi_start[1]:roi_end[1], roi_start[0]:roi_end[0]] # 展示截取的区域并保存为图像文件 cv2.imshow('Selected Region', roi) cv2.imwrite('output_image.jpg', roi) # 释放视频文件和窗口 video.release() cv2.destroyAllWindows() ``` 在上述代码中,你需要将`input_video.mp4`替换为你要截取的视频文件的路径。运行代码后,你可以通过拖动鼠标在视频帧上选一个区域,然后按下 's' 键来保存选定区域的图像。保存的图像将命名为`output_image.jpg`。 希望这可以帮助到你!如果有任何问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十幺卜入

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值