SDL绑定播放窗口 及 视频窗口缩放

本文介绍如何使用SDL库进行视频播放窗口的绑定与缩放操作,包括在初始化前设置环境变量、调整播放窗口尺寸以适应不同屏幕分辨率的方法,并讨论了SDL_CreateYUVOverlay与SDL_DisplayYUVOverlay的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 绑定播放窗口

必须在Sdl.SDL_Init之前执行 Sdl.SDL_putenv

同时SDL_SetVideoMode里播放窗口长宽不能大于绑定窗口的长宽

 

int i = Sdl.SDL_putenv("SDL_WINDOWID=" + panel2.Handle.ToString());

            if (i != 0)

            {

                MessageBox.Show("SDL初始化失败!");

                return false;

            }

 

 

视频窗口缩放

如果需要设置播放窗口随窗口大小变化而变化,则会发现dock等属性无效,需要把绑定的播放控件大小设为非常大,至少大于全屏分辨率吧,然后在frm_Resize事件里处理

private void frm_Resize(object sender, EventArgs e)

        {

            if (this.WindowState == FormWindowState.Minimized)

            {

                return;

            }

 

            int PlayVideoWidth = this.Width - 50; //根据窗体的宽度获取获取视频播放区域的宽度

            int PlayVideoHeight = this.Height - 40;//窗体宽带减去左右控件宽度及窗体边框宽度,可能有一两个像素的误差

 

            surfacePtr = Sdl.SDL_SetVideoMode(PlayVideoWidth, PlayVideoHeight, 0,Sdl.SDL_SWSURFACE | Sdl.SDL_RESIZABLE);

            rect = new Sdl.SDL_Rect(0, 0, (short)(PlayVideoWidth), (short)(PlayVideoHeight));

        }

 

 

这里不需要修改SDL_CreateYUVOverlay的大小,CreateYUVOverlay的大小为视频分辨率,DisplayYUVOverlay则为播放窗口的大小

 

SDL_SetVideoMode的参数显示新的显示大小,而SDL_CreateYUVOverlay(只需建立一次,SDL_SetVideoMode更换时,不需要跟着更换)的参数则是图片的原始大小 。
而在SDL_DisplayYUVOverlay中用到的SDL_Rect,大小则和SDL_SetVideoMode一样,也就是新的显示大小。

 

对应未绑定播放窗口的需要在这里处理,鼠标事件 ev.type == Sdl.SDL_VIDEORESIZE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值