zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Node.js 常用工具 util
    jQuery 选择器
    Node.js 创建HTTP服务器
    Node.js GET/POST请求
    JavaScript 用法
    Node.js 事件
    Node.js 函数
    Bootstrap<基础二> 网格系统
    读文章《Flexbox详解》笔记
    好文要读
  • 原文地址:https://www.cnblogs.com/jhlong/p/5433852.html
Copyright © 2011-2022 走看看