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

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

前言

上一篇讲了自由框选的功能传送地址:
Unity3d实现自由选中框并截图保存功能(一) 自由选中框实现。
这一篇开始实现将框选的区域保存为图片文件的功能。

先看效果

截图过程:
在这里插入图片描述

截取的图片:
在这里插入图片描述

实现思路

1.以上一篇的代码为基准;
2.再找个硬气的图片做背景;
3.需要保存鼠标开始、结束框选的位置,用于取框选数据;
4.根据框选大小创建贴图(Texture2D);
5.根据框选范围创建矩形(Rect);
6.从屏幕读取矩形区域的像素到保存的贴图数据;
7.将这个贴图编码成PNG格式,并获取字节(byte)数组;
8.将字节写入png文件内。

实现代码

  string Name = DateTime.Now.ToString("yyyyMMddHHmmss");

        Tex = new Texture2D((int)Mathf.Abs(StMsPos.x - EdMsPos.x), (int)Mathf.Abs(StMsPos.y - EdMsPos.y), TextureFormat.RGB24, true);

        CutRect = new Rect(StMsPos.x> EdMsPos.x? EdMsPos.x: StMsPos.x,
           StMsPos.y > EdMsPos.y ? EdMsPos.y : StMsPos.y,
           Mathf.Abs(EdMsPos.x - StMsPos.x), 
           Mathf.Abs(EdMsPos.y - StMsPos.y));

        yield return new WaitForEndOfFrame();
        Tex.ReadPixels(CutRect, 0, 0, true);
        Tex.Apply();
        yield return Tex;
        byte[] bytes = Tex.EncodeToPNG();

        File.WriteAllBytes(Application.dataPath + "/" + Name + ".png", bytes);

参照上面的思路,代码是比较明晰的,这里重点注意Rect的创建,它是以左下角开始的,所以需要对开始和结束点进行判定左下角位置。

源码地址

https://download.csdn.net/download/qq_33789001/16091589

下一篇已出炉:
Unity3d实现自由选中框并截图保存功能(三)选择路径保存截图功能

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值