阅读量:4
一:要求能读取文件夹中视频及图片并判断
private void Form1_Load(object sender, EventArgs e) { string foldPath = "路径";//获取该目录下的文件 string[] files = Directory.GetFiles(@foldPath + "\\", "*.*", System.IO.SearchOption.TopDirectoryOnly); var th = new Thread(delegate () { //遍历每个文件 for (int i = 0; i < files.Length; i++) { //判断当前组文件中第i个文件 if (IsPicture(files[i])) //图片 { Bitmap picture = new Bitmap(files[i]); ChangeBringToFrontImage(picture); } if (IsVideo(files[i])) //视频 { ChangeBringToFrontVideo(files[i]); } if (i == files.Length - 1) { //从0开始重新播放 i = 0; } } }); //开辟新线程 //th.IsBackground = true; //th.Start(); } //定义判断是否为图片 public bool IsPicture(string filePath) { var extension = Path.GetExtension(filePath).ToLowerInvariant(); return extension == ".jpg" || extension == ".jpeg" || extension == ".png" || extension == ".gif" || extension == ".bmp" || extension == ".tiff" || extension == ".ico"; } //定义判断是否为视频 public bool IsVideo(string filePath) { var extension = Path.GetExtension(filePath).ToLowerInvariant(); return extension == ".wmv" || extension == ".asf" || extension == ".asx" || extension == ".avi" || extension == ".mp4" || extension == ".mov" || extension == ".mkv"; }
二:视频跟图片要等比例放大缩小
pictureBox1.Dock = DockStyle.Fill; axWindowsMediaPlayer1.Dock = DockStyle.Fill;
三:更换窗体运行图标
// 移除窗体边框 this.FormBorderStyle = FormBorderStyle.None; // 允许用户调整窗体大小 this.SizeGripStyle = SizeGripStyle.Show; //设置窗体的最大大小和最小大小 this.MaximumSize = new Size(1920, 1080); this.MinimumSize = new Size(400, 300); //设置窗体的开始位置(CenterScreen将窗体居中) this.StartPosition = FormStartPosition.CenterScreen; // 设置窗体的举头文本 this.Text = "Trs宣传播报"; // 设置窗体的背景色 //this.BackColor = Color.Lime; // 设置窗体50%的透明度 //this.Opacity = 0.5; //更改窗体图标 this.Icon = Resources.Trs;
四:要求可配置文件路径及更换时间
//config <appSettings> <add key="Time" value="4000" /><!--循环的时间--> <add key="FromPath" value="C:\Users\N01465\Desktop\1" /><!--播放路径--> </appSettings> //From1_cs // 强制重新加载app.config ConfigurationManager.RefreshSection("appSettings"); // 读取所有设置 Time = ConfigurationManager.AppSettings["Time"]; FromPath = ConfigurationManager.AppSettings["FromPath"];
五:运行渲染的过程中不运行卡顿
//如一 开启新线程不使用主线程去渲染 private void ChangeBringToFrontImage(Image img) { if (pictureBox1.InvokeRequired) { // 使用Invoke安全地从其他线程调用 pictureBox1.Invoke(new Action(() => { pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; axWindowsMediaPlayer1.Visible = false; pictureBox1.Visible = true; pictureBox1.Image = img; Delay(Convert.ToInt32(Time)); })); } else { // 如果已经在创建控件的线程上,直接设置值 pictureBox1.Visible = true; axWindowsMediaPlayer1.Visible = false; pictureBox1.Image = img; Thread.Sleep(Convert.ToInt32(Time)); } } private void ChangeBringToFrontVideo(string filePath) { if (axWindowsMediaPlayer1.InvokeRequired) { // 使用Invoke安全地从其他线程调用 axWindowsMediaPlayer1.Invoke(new Action(() => { axWindowsMediaPlayer1.Visible = true; pictureBox1.Visible = false; #region 解决报错的方式你可以先不加这个你试试会不会报错 ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).BeginInit();//axWindowsMediaPlayer2为第三方控件名 axWindowsMediaPlayer1.uiMode = "None"; //隐藏视频播放器布局状态栏 this.Controls.Add(axWindowsMediaPlayer1); ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).EndInit(); #endregion this.axWindowsMediaPlayer1.URL = filePath; //1 的时候是关闭,结束了 try { while (!((int)axWindowsMediaPlayer1.playState == 1)) { Delay(500); } } catch { } })); } else { axWindowsMediaPlayer1.Visible = true; pictureBox1.Visible = false; #region 解决报错的方式你可以先不加这个你试试会不会报错 ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).BeginInit();//axWindowsMediaPlayer2为第三方控件名 axWindowsMediaPlayer1.uiMode = "None"; //隐藏视频播放器布局状态栏 this.Controls.Add(axWindowsMediaPlayer1); ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).EndInit(); #endregion this.axWindowsMediaPlayer1.URL = filePath; //1 的时候是关闭,结束了 while (!((int)axWindowsMediaPlayer1.playState == 1)) { Delay(500); } } }
六:隐藏标题栏后需要可拖拽缩放
可通过游标去实现我这边就不粘出来了