菜鸟学ffmpeg音视频技术之10 mac截图包含鼠标

FFMPEG实战——配置踩过的坑 最近用把ndk转到Android studio上来开发,在配置ffmpeg时着实遇到了不少坑,下面记录一下,以免以后在遇到类似问题。 1、首先是ffmpeg的编译so库 a、环境:我这里用的是ffmpeg3.3.9 ,ndk(r15c) 用的版本相对低一点,这便于遇到问题在网上可以找到解决方案。 服务器:CenOs7 模拟器也可以,但... 阅读详情

前面介绍了mac截图和截屏,但是截出来的图片都不包含鼠标。

研究发现默认跟window一样,截图都不包含鼠标,如果需要鼠标,需要自己绘制上去。

下面介绍如何将鼠标绘制上去

1.获取鼠标图像

NSImage *overlay    =   [[[NSCursor arrowCursor] image] copy];

2.获取鼠标位置

    NSPoint mouseLoc;
    mouseLoc = [NSEvent mouseLocation]; //get cur

    int x = (int)mouseLoc.x;
    int y = (int)mouseLoc.y;
    int w = (int)[overlay size].width;
    int h = (int)[overlay size].height;
    int org_x = x;
    int org_y = y;

3.根据原图创建绘制上下文环境

    size_t height = CGImageGetHeight(pSourceImage);
    size_t width =  CGImageGetWidth(pSourceImage);
    int bytesPerRow = CGImageGetBytesPerRow(pSourceImage);

    unsigned int * imgData = (unsigned int*)malloc(height*bytesPerRow);

    // have the graphics context now,
    CGRect bgBoundingBox = CGRectMake (0, 0, width,height);

    CGContextRef context =  CGBitmapContextCreate(imgData, width,
                                                  height,
                                                  8, // 8 bits per component
                                                  bytesPerRow,
                                                  CGImageGetColorSpace(pSourceImage),
                                                  CGImageGetBitmapInfo(pSourceImage));

4.绘制

    // first draw the image
    CGContextDrawImage(context,bgBoundingBox,pSourceImage);

    // then mouse cursor
    CGContextDrawImage(context,CGRectMake(0, 0, width,height),pSourceImage);

    // then mouse cursor
    CGContextDrawImage(context,CGRectMake(org_x, org_y, w,h),[overlay CGImageForProposedRect: NULL context: NULL hints: NULL] );


    // assuming both the image has been drawn then create an Image Ref for that

    CGImageRef pFinalImage = CGBitmapContextCreateImage(context);

    CGContextRelease(context);

 

5.完整代码

CGImageRef drawMouseCursor(CGImageRef pSourceImage){
    // get the cursor image
    NSPoint mouseLoc;
    mouseLoc = [NSEvent mouseLocation]; //get cur

    //NSLog(@"Mouse location is x=%d,y=%d",(int)mouseLoc.x,(int)mouseLoc.y);

    // get the mouse image
    NSImage *overlay    =   [[[NSCursor arrowCursor] image] copy];

    //NSLog(@"Mouse location is x=%d,y=%d cursor width = %d, cursor height = %d",(int)mouseLoc.x,(int)mouseLoc.y,(int)[overlay size].width,(int)[overlay size].height);

    int x = (int)mouseLoc.x;
    int y = (int)mouseLoc.y;
    int w = (int)[overlay size].width;
    int h = (int)[overlay size].height;
    int org_x = x;
    int org_y = y;

    size_t height = CGImageGetHeight(pSourceImage);
    size_t width =  CGImageGetWidth(pSourceImage);
    int bytesPerRow = CGImageGetBytesPerRow(pSourceImage);

    unsigned int * imgData = (unsigned int*)malloc(height*bytesPerRow);

    // have the graphics context now,
    CGRect bgBoundingBox = CGRectMake (0, 0, width,height);

    CGContextRef context =  CGBitmapContextCreate(imgData, width,
                                                  height,
                                                  8, // 8 bits per component
                                                  bytesPerRow,
                                                  CGImageGetColorSpace(pSourceImage),
                                                  CGImageGetBitmapInfo(pSourceImage));

    // first draw the image
    CGContextDrawImage(context,bgBoundingBox,pSourceImage);

    // then mouse cursor
    CGContextDrawImage(context,CGRectMake(0, 0, width,height),pSourceImage);

    // then mouse cursor
    CGContextDrawImage(context,CGRectMake(org_x, org_y, w,h),[overlay CGImageForProposedRect: NULL context: NULL hints: NULL] );


    // assuming both the image has been drawn then create an Image Ref for that

    CGImageRef pFinalImage = CGBitmapContextCreateImage(context);

    CGContextRelease(context);

    return pFinalImage; /* to be released by the caller */
}

 

ffmpeg实现录屏+录音 1、概述 最简单的基于FFmpeg的AVDevice例子(屏幕录制+声音采集),视频采用mpeg4编码,音频采用aac编码,并生成mp4文件,其中fifo是此程序的关键,此程序只是一个demo很多优化都没做,仅供参考。 2、代码 [cpp] view plain copy "code" class="cpp">/**   *最简单的基于FF 阅读详情

相关推荐

ffmpeg录屏

采用内存dc抓取屏幕图像并送入ffmpeg压制为avi视频

FFMPEG VCL Pack Crack显示位置支持或光标

FFMPEG VCL Pack是一个组合解决方案和平台,用于在Delphi中录制、转换和传播音频和视频,其中包括音频/视频库中的前一个libavcodec。之前已经定义了许多配置文件(iPad、iPad、PS3、手机等)支持TBitmap、显示页面、网络快捷方式和直接录制设备。将多个文件添加到一个文件中,将一个文件转换为多个文件。支持多种视频过滤器(水印、叠加文本、圆圈等)基于CPU中的多线程和更快的粒子,ffmpeg提供的编码和解码支持。支持ASS、SSA、SRT字幕。初步职责、不当行为和延续。

q2315702359的博客 468

BeikeShop跨境电商独立站系统V1.5.0免授权全开源版

BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统,主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop商城 Beike多语言商城 多货币商城B2C商城系统 代码100%开源 PHP商城系统 H5/PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 9 框架插件化开发,MVC架构 支持插件市场。Event 机制实现Hook功能,自定义可视化装修。

818

mac _ Screenshots and screenshots

由于项目需要,需要一个截图功能。// 截屏(全屏幕)- (IBAction)button1:(id)sender { NSMutableArray *datas = [NSMutableArray array]; //存储所有显示器显示id CGDirectDisplayID dspyIDArray[10]; uint32_t dspyIDCount = 0;

征战无悔人生 586

J-Flash手动添加华大HC32F460型号全攻略

在嵌入式开发中,Flash编程算法是连接调试工具与微控制器的重要桥梁,它定义了芯片存储器的擦除、编程和校验等底层操作规范。其原理是通过调试接口将算法代码加载到目标芯片的RAM中执行,从而实现对Flash存储器的访问与控制。这项技术的核心价值在于打破了工具链对芯片型号的固有支持限制,使得开发者能够灵活适配各种新兴或定制化的微控制器。在工程实践中,当面对J-Link等主流调试器官方支持包更新滞后时,手动添加芯片型号成为保障开发效率的关键技能。本文以华大半导体的HC32F460系列MCU为例,详细解析了如何通过配

weixin_29192365的博客 349

UG二次开发避坑指南:如何正确配置Python环境让NXOpen脚本跑起来?

本文详细介绍了UG/NX二次开发中Python环境配置的全流程与NXOpen脚本调试技巧,帮助开发者避开常见陷阱。从NXOpen架构解析到Python解释器版本匹配,再到环境变量设置与路径问题处理,提供了一套经过验证的配置方案,确保脚本顺利运行。

weixin_33859135的博客 448

ffmpeg录屏录音

-f fmt (input/output) 强制设定输入或输出文件格式。通常会自动检测输入文件的格式,并从输出文件的文件扩展名猜测格式,因此大多数情况下不需要这个选项。 -i url (input) 输入 -y (global) 在没有请求的情况下覆盖输出文件。 -n (global) 不要覆盖输出文件,如果指定的输出文件已经存...

Mickey丶笑风沙 571

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4200

ffmpeg录屏鼠标闪烁问题解决方法

场景: 显卡很差的电脑,使用ffmpeg录屏,鼠标闪烁的几乎看不到。录屏实现方法是使用ffmpeg,源采用的是gdigrab。 解决方法:

撬动未来的支点的专栏 3352

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 796

从数据集到产品:聊聊Room-to-Room (R2R) 如何影响扫地机器人、AR导航的未来

本文探讨了Room-to-Room (R2R) 数据集如何推动视觉与语言导航(VLN)技术的发展,并重塑扫地机器人和AR导航的未来。通过分析R2R基于Matterport3D的设计及其在真实场景中的应用,揭示了其在提升智能导航精度和自然语言交互能力方面的潜力。文章还讨论了从实验室到产品化的关键技术挑战与解决方案。

weixin_29084231的博客 139

技术干货 | 录屏采集实现教程 —— macOS桌面端

实时屏幕共享功能,在视频会议、游戏直播、在线教育等场景中已广泛被应用。近日,主打屏幕分享的社交应用「Squad」被Twitter收购,让我们看到了实时屏幕共享融于更多行业,开启丰富玩法的趋势。 作为实时屏幕共享的第一步,录屏采集在不同终端和系统上的实现方式有所不同。之前我们已经分享了Android端,下面将分享本系列的第二篇,如何实现macOS桌面端屏幕共享的录屏采集。 在macOS系统下,说到媒体数据相关,就不得不提到 macOS 上AVFoundation多媒体框架。它是基于Apple Darwin

ZEGO即构科技 2099

游戏引擎揭秘:大厂为何死磕自研?

游戏引擎本质与商业价值解析 游戏引擎是集成了渲染、物理、动画等核心功能的开发工具包,其价值在于让开发者免于重复编写底层代码,专注于游戏内容创作。商业引擎(如Unity/Unreal)虽降低了开发门槛,但头部厂商仍坚持自研引擎,主要基于以下考量: 经济性:长期项目分摊自研成本后,比商业引擎分成更划算; 可控性:完全掌握底层代码,能针对性优化核心玩法需求; 技术壁垒:专属引擎成为厂商的竞争优势,如米哈游的跨平台渲染技术; 项目适配:超大型游戏(开放世界/MMO)需要深度定制解决方案。 这种"短期高投入

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 263

mac 鼠标经过事件mouseEntered

#import"mouseView.h" @implementation mouseView - (id)initWithFrame:(NSRect)frame {     self = [super initWithFrame:frame];     if (self) {        // Initialization code here.

ch_soft的专栏 6858

PyTorch深度学习实战(3)——使用PyTorch构建神经网络

PyTorch 是一个用于构建深度神经网络的库,具有灵活性和可扩展性,可以轻松自定义模型。在本节中,我们将使用 PyTorch 库构建神经网络,利用张量对象操作和梯度值计算更新网络权重,并利用 Sequential 类简化网络构建过程,最后还介绍了如何使用 save、load 方法保存和加载模型,以节省模型训练时间。

盼小辉丶的博客 8万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

菜鸟学ffmpeg音视频技术之8 mac窗口截图

https://blog.youkuaiyun.com/xpg4321/article/details/112358449介绍了如何枚举mac系统的窗口。 下面介绍如何截取窗口图像。 1.获取窗口信息 参考前一节介绍的mac枚举窗口函数获取窗口信息。 if(nullptr == _screen_caputre) break; bool b = _screen_caputre->caputreWindow(_record_wind.

xpg4321的博客 497

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FFMPEG录屏(1)----录制桌面

首先录制桌面有很多种方法,原生windows api进行GDI抓屏,Mirror,Direct等,本文针对ffmpeg gdi抓屏进行介绍,也开始录屏软件开发之旅。 准备ffmpeg,无所谓是动态库、静态库,请自行前往下载并引入工程。 在本系列文章中,一些FFMPEG的结构、函数并不会做过多说明,请自行了解,重点放在了桌面录制的整体流程。 参考资料: ffmpeg 源代码简单分析 初始化...

4301

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SDL隐藏鼠标光标

在需要将视频投影到大屏幕的情况下,鼠标光标会影响美观。因此需要将鼠标光标隐藏。 在消息循环里调用SDL_ShowCursor(false),光标隐藏了但是点击依然有效。 ...

不积跬步无以至千里 1469

ffmpeg常用操作举例

https://ffmpeg.org/ffmpeg.html sudo apt-get install ffmpeg 微信只允许上传20MB的视频,为了使用微信方便传送我们的视觉数据,可以有如下几种压缩方法: 压缩比特率 截取部分视频片段 截取部分视频画面 快进视频 转化为微信支持的格式: ffmpeg -i input.mp4 -vf scale=-1:720 -b 1...

ziliwangmoe的博客 718

ffplay常用命令

一、主要选项说明: -x width    强制显示宽带。 -y height    强制显示高度。 -s size    帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频。该参数已经被废弃,请尝试用-video_size代替 -fs    以全屏模式启动。 -an    禁用音频(不播放声音) -vn    禁用视频(不播放视频) -sn    禁...

qq_18086953的博客 1万+

Qt实现截图之一 截图

最近项目需要使用qt实现截图功能,再次记录一下,希望对您有所帮助,qt我是用的是5.9.9版本。 1.截图 qt截图推荐使用QScreen来实现截图,使用grab这种方式只能截窗体且窗体如果是opengl窗体或者视频窗体无法获取数据。 1.截主屏幕 截主屏幕代码相对简单 QScreen* screen = QApplication::primaryScreen(); QPixmap pixmap = screen->grabWindow(QApplication::deskt

xpg4321的博客 5167
上一篇: 菜鸟学ffmpeg音视频技术之9 mac截取进程图像
下一篇: 菜鸟学ffmpeg音视频技术之11 mac采集audio
很菜但努力
博客等级 码龄17年 113粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值