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

 绑定播放窗口

必须在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

原文地址:https://www.cnblogs.com/jhlong/p/5433852.html