C++开发的GIF 录制器:比 QQ 录制更清晰 一键选区录制

C++开发的GIF 录制器:比 QQ 录制更清晰 一键选区录制-可达鸭小栈
C++开发的GIF 录制器:比 QQ 录制更清晰 一键选区录制
此内容为免费资源,请登录后查看
0
积分资源免费
付费资源可享->
免费更新
协助部署
在线答疑
免费资源

智谱

AI 正在加载摘要

前言:

平时写博客、做教程,经常需要录个 GIF 演示。用 QQ 自带的录制吧,方便是方便,但画质糊得有点难受,而且选区操作也不够顺手。于是自己用 C++ 写了一个小工具,核心就三点:高清一点、简单一点、实用一点

工具叫「可达鸭 GIF 录制器」,界面只有一个按钮,点开始 → 拖拽选区 → 自动录制,点停止 → 自动保存到程序根目录的 output.gif。没有多余设置,打开就能用。

工具界面展示:

output

下面是QQ录制效果

QQ20260916-224219-HD

能比较明显的感觉到 QQ的不太清晰

使用方法:

  1. 打开软件,点击「开始录制」

  2. 像 QQ 截图一样拖拽选区

  3. 松开鼠标,自动开始录制

  4. 点击「停止录制」,GIF 自动保存到程序所在目录

工具核心亮点

1. 比 QQ 录制更清晰

QQ 的 GIF 录制默认压缩得比较狠,颜色和细节丢失明显。我这个工具在帧率和色彩保留上做了取舍,默认 10 帧每秒,对于大多数操作演示足够流畅,同时 GIF 文件不会太大。录文字、代码类内容时,清晰度优势比较明显。

当然,GIF 格式本身最多 256 色,真要比画质肯定比不过 MP4。但在 GIF 这个范围内,它比 QQ 录出来的要干净不少。

2. 像 QQ 截图一样选区

点「开始录制」后,会弹出一个全屏遮罩,直接拖拽鼠标框选要录的区域,用起来和 QQ 截图一模一样。不用记快捷键,不用调参数,松开鼠标就开始录。

3. 一键开始 / 停止,自动保存

按钮就两个状态:开始录制停止录制。停止后自动保存到程序所在目录,文件名固定 output.gif,省得每次都要选保存位置。

4. 轻量无依赖

整个工具基于 MFC 对话框开发,编译出来就一个 exe,不需要额外安装运行库,也不需要配置任何环境。拷贝到任何 Windows 电脑上都能直接跑。

实现思路:

整体逻辑不复杂,但有两个细节值得说一下。

一是录制线程的节奏控制。 录制跑在独立线程里,每帧抓屏后按实际耗时补偿休眠时间,避免抓屏本身的开销拖慢帧率:

const int frameIntervalMs = m_delayCentis * 10;

while (!m_stopRequested.load())
{
    DWORD startTick = ::GetTickCount();

    if (CaptureFrameInternal())
        m_frameCount++;

    DWORD elapsed = ::GetTickCount() - startTick;
    int sleepMs = frameIntervalMs - static_cast<int>(elapsed);
    if (sleepMs > 0)
        ::Sleep(sleepMs);
}

二是抓屏后的像素格式转换。 抓屏拿到的是 BGRA,GIF 编码需要 RGBA,中间做了一次通道交换,不处理的话录出来颜色会偏:

// GDI 返回 BGRA,gif.h 期望 RGBA => 交换 R/B
for (size_t i = 0; i < rgbaBuffer.size(); i += 4)
    std::swap(rgbaBuffer[i], rgbaBuffer[i + 2]);

这款工具是我在实际使用中顺手写出来的,基于 MFC 对话框 + 屏幕捕获 + GIF 编码,代码量不大,逻辑也简单。希望能给有同样需求的朋友一点参考,也欢迎各位技术爱好者一起交流。

开发时间较短,没有大量测试,如果遇到 BUG 请与我联系反馈。

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
看完了?看完了愣着啊点赞干什么
点赞44 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容