http://www.cnblogs.com/endv/p/6052511.html
1 // ------------------------------------------------------------------ 2 // CaptureTest.cs 3 // Sample application to show the DirectX.Capture class library. 4 // 5 // History: 6 // 2003-Jan-25 BL - created 7 // 8 // Copyright (c) 2003 Brian Low 9 // ------------------------------------------------------------------ 10 11 using DirectShowLib; 12 using DirectX.Capture; 13 using System; 14 using System.Diagnostics; 15 using System.Drawing; 16 using System.Runtime.InteropServices; 17 using System.Text; 18 using System.Windows.Forms; 19 20 namespace CaptureTest 21 { 22 public class CaptureTest : System.Windows.Forms.Form 23 { 24 ///25 /// 应用程序的主要入口点 26 /// 27 [STAThread] 28 static void Main() 29 { 30 AppDomain currentDomain = AppDomain.CurrentDomain; 31 Application.Run(new CaptureTest()); 32 GC.Collect(); 33 GC.WaitForPendingFinalizers(); 34 } 35 36 // kernel32.dll是Windows9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理, 37 // 当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域 38 [DllImport("kernel32.dll")] 39 static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName); 40 41 [DllImport("kernel32.dll")] 42 static extern uint WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName); 43 44 const int WM_GRAPHNOTIFY = 0x8000 + 1; 45 private long iDroppedBefore = 0; 46 private DateTime dtBefore; 47 private IMediaEventEx mediaEvent = null; 48 private int CaptureResult; 49 private 捕获 capture = null; 50 private Filters filters = new Filters(); 51 private Size m_FrameSize; // Reading the value from capture.Framesize derenders the graph 52 53 public CaptureTest() 54 { 55 InitializeComponent(); // 所需的窗体设计器支持 56 57 LoadDevices();//负载设备 58 59 if (capture != null) 60 { 61 LoadDeviceSettings();//加载设备设置 62 LoadCompressors();//加载压缩机 63 } 64 65 // 更新主菜单中的许多有趣的工作,这个示例发生在这里 66 try { updateMenu(); } catch { } 67 68 // 由于压缩机设置不在菜单上,不需要再做 updatemenu 。 69 // 已后要做的 updatemenu 由于其中一个调用重置这些。 70 71 if (capture != null) 72 { 73 LoadCompressorSettings();//加载压缩机设置 74 } 75 } 76 77 78 #region 加载 79 //加载设备 80 protected void LoadDevices() 81 { 82 int x; 83 int iVideoDeviceIndex = -1; 84 int iAudioDeviceIndex = -1; 85 StringBuilder sbOut = new StringBuilder(500); 86 87 string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 88 89 GetPrivateProfileString("Devices", "VideoDevice", "", sbOut, 500, sConfigFile); 90 91 if (sbOut.Length > 0) 92 { 93 for (x = 0; x < filters.VideoInputDevices.Count; x++) 94 { 95 if (filters.VideoInputDevices[x].Name == sbOut.ToString()) 96 { 97 iVideoDeviceIndex = x; 98 break; 99 } 100 } 101 } 102 103 GetPrivateProfileString("Devices", "AudioDevice", "", sbOut, 500, sConfigFile); 104 105 106 if (sbOut.Length > 0) 107 { 108 for (x = 0; x < filters.AudioInputDevices.Count; x++) 109 { 110 if (filters.AudioInputDevices[x].Name == sbOut.ToString()) 111 { 112 iAudioDeviceIndex = x; 113 break; 114 } 115 } 116 } 117 118 if ((iVideoDeviceIndex >= 0) || (iAudioDeviceIndex >= 0)) 119 { 120 Filter i, j; 121 122 if (iVideoDeviceIndex >= 0) 123 i = filters.VideoInputDevices[iVideoDeviceIndex]; 124 else 125 i = null; 126 127 if (iAudioDeviceIndex >= 0) 128 j = filters.AudioInputDevices[iAudioDeviceIndex]; 129 else 130 j = null; 131 132 capture = new 捕获(i, j); 133 134 capture.CaptureComplete += new EventHandler(OnCaptureComplete); 135 136 if (iVideoDeviceIndex >= 0) 137 { 138 GetPrivateProfileString("Devices", "VideoSource", "", sbOut, 500, sConfigFile); 139 140 for (x = 0; x < capture.VideoSources.Count; x++) 141 { 142 if (capture.VideoSources[x].Name == sbOut.ToString()) 143 { 144 capture.VideoSource = capture.VideoSources[x]; 145 break; 146 } 147 } 148 } 149 150 if (iAudioDeviceIndex >= 0) 151 { 152 GetPrivateProfileString("Devices", "AudioSource", "", sbOut, 500, sConfigFile); 153 154 for (x = 0; x < capture.AudioSources.Count; x++) 155 { 156 if (capture.AudioSources[x].Name == sbOut.ToString()) 157 { 158 capture.AudioSource = capture.AudioSources[x]; 159 break; 160 } 161 } 162 } 163 } 164 } 165 166 //加载设备设置 167 protected void LoadDeviceSettings() 168 { 169 StringBuilder sbOut = new StringBuilder(500); 170 string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 171 172 if (capture.VideoDevice != null) 173 { 174 GetPrivateProfileString("DeviceSettings", "FrameRate", "", sbOut, 500, sConfigFile); 175 if (sbOut.Length > 0) 176 capture.FrameRate = Convert.ToDouble(sbOut.ToString()); 177 178 GetPrivateProfileString("DeviceSettings", "VideoWidth", "", sbOut, 500, sConfigFile); 179 if (sbOut.Length > 0) 180 { 181 Size size = new Size(Convert.ToInt32(sbOut.ToString()), 0); 182 183 GetPrivateProfileString("DeviceSettings", "VideoHeight", "", sbOut, 500, sConfigFile); 184 if (sbOut.Length > 0) 185 { 186 size.Height = Convert.ToInt32(sbOut.ToString()); 187 capture.FrameSize = size; 188 } 189 } 190 } 191 192 if (capture.AudioDevice != null) 193 { 194 GetPrivateProfileString("DeviceSettings", "AudioChannel", "", sbOut, 500, sConfigFile); 195 if (sbOut.Length > 0) 196 { 197 capture.AudioChannels = Convert.ToInt16(sbOut.ToString()); 198 } 199 200 GetPrivateProfileString("DeviceSettings", "AudioRate", "", sbOut, 500, sConfigFile); 201 if (sbOut.Length > 0) 202 { 203 capture.AudioSamplingRate = Convert.ToInt32(sbOut.ToString()); 204 } 205 206 GetPrivateProfileString("DeviceSettings", "AudioSize", "", sbOut, 500, sConfigFile); 207 if (sbOut.Length > 0) 208 { 209 capture.AudioSampleSize = Convert.ToInt16(sbOut.ToString()); 210 } 211 212 GetPrivateProfileString("DeviceSettings", "AudioChannel", "", sbOut, 500, sConfigFile); 213 if (sbOut.Length > 0) 214 { 215 capture.AudioChannels = Convert.ToInt16(sbOut.ToString()); 216 } 217 } 218 219 } 220 //加载压缩机 221 protected void LoadCompressors() 222 { 223 int x; 224 StringBuilder sbOut = new StringBuilder(500); 225 string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 226 227 if (capture.VideoDevice != null) 228 { 229 GetPrivateProfileString("Compressor", "VideoCompressor", "", sbOut, 500, sConfigFile); 230 231 if (sbOut.Length > 0) 232 { 233 for (x = 0; x < filters.VideoCompressors.Count; x++) 234 { 235 if (filters.VideoCompressors[x].Name == sbOut.ToString()) 236 { 237 capture.VideoCompressor = filters.VideoCompressors[x]; 238 break; 239 } 240 } 241 } 242 } 243 244 if (capture.AudioDevice != null) 245 { 246 GetPrivateProfileString("Compressor", "AudioCompressor", "", sbOut, 500, sConfigFile); 247 248 for (x = 0; x < filters.AudioCompressors.Count; x++) 249 { 250 if (filters.AudioCompressors[x].Name == sbOut.ToString()) 251 { 252 capture.AudioCompressor = filters.AudioCompressors[x]; 253 break; 254 } 255 } 256 } 257 } 258 //加载压缩机设置 259 protected void LoadCompressorSettings() 260 { 261 StringBuilder sbOut = new StringBuilder(500); 262 string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 263 264 if (capture.VideoCompressor != null) 265 { 266 try 267 { 268 VideoCompressorCaps i = capture.VideoCompressorCaps; 269 270 GetPrivateProfileString("Compressor", "KeyFrameRate", "", sbOut, 500, sConfigFile); 271 if (sbOut.Length > 0) 272 i.KeyFrameRate = Convert.ToInt32(sbOut.ToString()); 273 274 GetPrivateProfileString("Compressor", "PFrames", "", sbOut, 500, sConfigFile); 275 if (sbOut.Length > 0) 276 i.PFramesPerKeyFrame = Convert.ToInt32(sbOut.ToString()); 277 278 GetPrivateProfileString("Compressor", "WindowSize", "", sbOut, 500, sConfigFile); 279 if (sbOut.Length > 0) 280 i.WindowSize = Convert.ToInt64(sbOut.ToString()); 281 282 GetPrivateProfileString("Compressor", "Quality", "", sbOut, 500, sConfigFile); 283 if (sbOut.Length > 0) 284 i.Quality = Convert.ToInt32(sbOut.ToString()); 285 } 286 catch { } 287 } 288 } 289 290 //保存默认设置 "\\..\\Config.ini" 291 protected void SaveDefaults() 292 { 293 string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 294 295 if (capture != null) 296 { 297 if (capture.VideoDevice != null) 298 { 299 WritePrivateProfileString("Devices", "VideoDevice", capture.VideoDevice.Name, sConfigFile); 300 WritePrivateProfileString("DeviceSettings", "FrameRate", capture.FrameRate.ToString(), sConfigFile); 301 WritePrivateProfileString("DeviceSettings", "VideoWidth", capture.FrameSize.Width.ToString(), sConfigFile); 302 WritePrivateProfileString("DeviceSettings", "VideoHeight", capture.FrameSize.Height.ToString(), sConfigFile); 303 } 304 else 305 { 306 WritePrivateProfileString("Devices", "VideoDevice", "", sConfigFile); 307 WritePrivateProfileString("DeviceSettings", "FrameRate", "", sConfigFile); 308 WritePrivateProfileString("DeviceSettings", "VideoWidth", "", sConfigFile); 309 WritePrivateProfileString("DeviceSettings", "VideoHeight", "", sConfigFile); 310 } 311 if (capture.AudioDevice != null) 312 { 313 WritePrivateProfileString("Devices", "AudioDevice", capture.AudioDevice.Name, sConfigFile); 314 WritePrivateProfileString("DeviceSettings", "AudioChannel", capture.AudioChannels.ToString(), sConfigFile); 315 WritePrivateProfileString("DeviceSettings", "AudioRate", capture.AudioSamplingRate.ToString(), sConfigFile); 316 WritePrivateProfileString("DeviceSettings", "AudioSize", capture.AudioSampleSize.ToString(), sConfigFile); 317 } 318 else 319 { 320 WritePrivateProfileString("Devices", "AudioDevice", "", sConfigFile); 321 WritePrivateProfileString("DeviceSettings", "AudioChannel", "", sConfigFile); 322 WritePrivateProfileString("DeviceSettings", "AudioRate", "", sConfigFile); 323 WritePrivateProfileString("DeviceSettings", "AudioSize", "", sConfigFile); 324 } 325 if (capture.VideoCompressor != null) 326 { 327 WritePrivateProfileString("Compressor", "VideoCompressor", capture.VideoCompressor.Name, sConfigFile); 328 329 CompressionCaps i = CompressionCaps.None; 330 331 try 332 { 333 i = capture.VideoCompressorCaps.GetCaps; 334 } 335 catch { } 336 337 if ((i & CompressionCaps.CanKeyFrame) > 0) 338 WritePrivateProfileString("Compressor", "KeyFrameRate", capture.VideoCompressorCaps.KeyFrameRate.ToString(), sConfigFile); 339 340 if ((i & CompressionCaps.CanBFrame) > 0) 341 WritePrivateProfileString("Compressor", "PFrames", capture.VideoCompressorCaps.PFramesPerKeyFrame.ToString(), sConfigFile); 342 343 if ((i & CompressionCaps.CanWindow) > 0) 344 WritePrivateProfileString("Compressor", "WindowSize", capture.VideoCompressorCaps.WindowSize.ToString(), sConfigFile); 345 346 if ((i & CompressionCaps.CanQuality) > 0) 347 WritePrivateProfileString("Compressor", "Quality", capture.VideoCompressorCaps.Quality.ToString(), sConfigFile); 348 349 } 350 else 351 { 352 WritePrivateProfileString("Compressor", "VideoCompressor", "", sConfigFile); 353 WritePrivateProfileString("Compressor", "KeyFrameRate", "", sConfigFile); 354 WritePrivateProfileString("Compressor", "PFrames", "", sConfigFile); 355 WritePrivateProfileString("Compressor", "WindowSize", "", sConfigFile); 356 WritePrivateProfileString("Compressor", "Quality", "", sConfigFile); 357 } 358 if (capture.AudioCompressor != null) 359 { 360 WritePrivateProfileString("Compressor", "AudioCompressor", capture.AudioCompressor.Name, sConfigFile); 361 } 362 else 363 { 364 WritePrivateProfileString("Compressor", "AudioCompressor", "", sConfigFile); 365 } 366 if (capture.VideoSource != null) 367 { 368 WritePrivateProfileString("Devices", "VideoSource", capture.VideoSource.Name, sConfigFile); 369 } 370 else 371 { 372 WritePrivateProfileString("Devices", "VideoSource", "", sConfigFile); 373 } 374 if (capture.AudioSource != null) 375 { 376 WritePrivateProfileString("Devices", "AudioSource", capture.AudioSource.Name, sConfigFile); 377 } 378 else 379 { 380 WritePrivateProfileString("Devices", "AudioSource", "", sConfigFile); 381 } 382 383 #if DEBUG 384 foreach (PropertyPage p in capture.PropertyPages) 385 { 386 if (p.SupportsPersisting) 387 { 388 // Doesn't seem to work right 389 Debug.WriteLine(p.Name); 390 } 391 } 392 #endif 393 } 394 } 395 396 397 //更新主菜单中的许多有趣的工作,这个示例发生在这里 398 private void updateMenu() 399 { 400 MenuItem m; 401 Filter f; 402 Source s; 403 Source current;//当前 404 PropertyPage p; 405 Control oldPreviewWindow = null; 406 407 // 正确的长宽比 Correct aspect ratio 408 if ((capture != null) && (capture.VideoDevice != null)) 409 { 410 //帧大小 411 m_FrameSize = capture.FrameSize; 412 VideoWindowResize(); 413 } 414 415 // Give our window handle to the NotifyWindow so we'll get called about 416 // events of interest 417 if (capture != null) 418 { 419 mediaEvent = capture.MediaEventEx; 420 int hr = mediaEvent.SetNotifyWindow(this.Handle, WM_GRAPHNOTIFY, IntPtr.Zero); 421 } 422 423 btnCue.Enabled = capture != null; 424 btnStart.Enabled = capture != null; 425 426 // Disable preview to avoid additional flashes (optional) 427 if (capture != null) 428 { 429 oldPreviewWindow = capture.PreviewWindow; 430 capture.PreviewWindow = null; 431 } 432 433 // Load video devices 434 Filter videoDevice = null; 435 if (capture != null) 436 videoDevice = capture.VideoDevice; 437 mnuVideoDevices.MenuItems.Clear(); 438 m = new MenuItem("(None)", new EventHandler(mnuVideoDevices_Click)); 439 m.Checked = (videoDevice == null); 440 mnuVideoDevices.MenuItems.Add(m); 441 for (int c = 0; c < filters.VideoInputDevices.Count; c++) 442 { 443 f = filters.VideoInputDevices[c]; 444 m = new MenuItem(f.Name, new EventHandler(mnuVideoDevices_Click)); 445 m.Checked = (videoDevice == f); 446 mnuVideoDevices.MenuItems.Add(m); 447 } 448 mnuVideoDevices.Enabled = (filters.VideoInputDevices.Count > 0); 449 450 // Load audio devices 451 Filter audioDevice = null; 452 if (capture != null) 453 audioDevice = capture.AudioDevice; 454 mnuAudioDevices.MenuItems.Clear(); 455 m = new MenuItem("(None)", new EventHandler(mnuAudioDevices_Click)); 456 m.Checked = (audioDevice == null); 457 mnuAudioDevices.MenuItems.Add(m); 458 for (int c = 0; c < filters.AudioInputDevices.Count; c++) 459 { 460 f = filters.AudioInputDevices[c]; 461 m = new MenuItem(f.Name, new EventHandler(mnuAudioDevices_Click)); 462 m.Checked = (audioDevice == f); 463 mnuAudioDevices.MenuItems.Add(m); 464 } 465 mnuAudioDevices.Enabled = (filters.AudioInputDevices.Count > 0); 466 467 468 // Load video compressors 469 try 470 { 471 mnuVideoCompressors.MenuItems.Clear(); 472 m = new MenuItem("(None)", new EventHandler(mnuVideoCompressors_Click)); 473 m.Checked = (capture.VideoCompressor == null); 474 mnuVideoCompressors.MenuItems.Add(m); 475 for (int c = 0; c < filters.VideoCompressors.Count; c++) 476 { 477 f = filters.VideoCompressors[c]; 478 m = new MenuItem(f.Name, new EventHandler(mnuVideoCompressors_Click)); 479 m.Checked = (capture.VideoCompressor == f); 480 mnuVideoCompressors.MenuItems.Add(m); 481 } 482 mnuVideoCompressors.Enabled = ((capture.VideoDevice != null) && (filters.VideoCompressors.Count > 0)); 483 } 484 catch { mnuVideoCompressors.Enabled = false; } 485 486 try 487 { 488 // Only enable the video compression menu option if the compressor 489 // supports at least one setting 如果选择菜单视频压缩压缩至少一个端口设置。允许 490 mnuCompressionProps.Enabled = (capture.VideoCompressorCaps.GetCaps & 491 (CompressionCaps.CanBFrame | 492 CompressionCaps.CanKeyFrame | 493 CompressionCaps.CanQuality | 494 CompressionCaps.CanWindow)) > 0; 495 } 496 catch 497 { 498 mnuCompressionProps.Enabled = false; 499 } 500 501 // Load audio 压缩机(compressors) 502 try 503 { 504 mnuAudioCompressors.MenuItems.Clear(); 505 m = new MenuItem("(None)", new EventHandler(mnuAudioCompressors_Click)); 506 m.Checked = (capture.AudioCompressor == null); 507 mnuAudioCompressors.MenuItems.Add(m); 508 for (int c = 0; c < filters.AudioCompressors.Count; c++) 509 { 510 f = filters.AudioCompressors[c]; 511 m = new MenuItem(f.Name, new EventHandler(mnuAudioCompressors_Click)); 512 m.Checked = (capture.AudioCompressor == f); 513 mnuAudioCompressors.MenuItems.Add(m); 514 } 515 mnuAudioCompressors.Enabled = ((capture.AudioDevice != null) && (filters.AudioCompressors.Count > 0)); 516 } 517 catch { mnuAudioCompressors.Enabled = false; } 518 519 // Load video sources 520 try 521 { 522 mnuVideoSources.MenuItems.Clear(); 523 current = capture.VideoSource; 524 for (int c = 0; c < capture.VideoSources.Count; c++) 525 { 526 s = capture.VideoSources[c]; 527 m = new MenuItem(s.Name, new EventHandler(mnuVideoSources_Click)); 528 m.Checked = (current == s); 529 mnuVideoSources.MenuItems.Add(m); 530 } 531 mnuVideoSources.Enabled = (capture.VideoSources.Count > 0); 532 } 533 catch { mnuVideoSources.Enabled = false; } 534 535 // Load audio sources 536 try 537 { 538 mnuAudioSources.MenuItems.Clear(); 539 current = capture.AudioSource; 540 for (int c = 0; c < capture.AudioSources.Count; c++) 541 { 542 s = capture.AudioSources[c]; 543 m = new MenuItem(s.Name, new EventHandler(mnuAudioSources_Click)); 544 m.Checked = (current == s); 545 mnuAudioSources.MenuItems.Add(m); 546 } 547 mnuAudioSources.Enabled = (capture.AudioSources.Count > 0); 548 } 549 catch { mnuAudioSources.Enabled = false; } 550 551 // Load frame rates 552 try 553 { 554 mnuFrameRates.MenuItems.Clear(); 555 int frameRate = (int)(capture.FrameRate * 1000); 556 m = new MenuItem("15 fps", new EventHandler(mnuFrameRates_Click)); 557 m.Checked = (frameRate == 15000); 558 mnuFrameRates.MenuItems.Add(m); 559 m = new MenuItem("24 fps (Film)", new EventHandler(mnuFrameRates_Click)); 560 m.Checked = (frameRate == 24000); 561 mnuFrameRates.MenuItems.Add(m); 562 m = new MenuItem("25 fps (PAL)", new EventHandler(mnuFrameRates_Click)); 563 m.Checked = (frameRate == 25000); 564 mnuFrameRates.MenuItems.Add(m); 565 m = new MenuItem("29.997 fps (NTSC)", new EventHandler(mnuFrameRates_Click)); 566 m.Checked = (frameRate == 29997) || (frameRate == 29970); 567 mnuFrameRates.MenuItems.Add(m); 568 m = new MenuItem("30 fps (~NTSC)", new EventHandler(mnuFrameRates_Click)); 569 m.Checked = (frameRate == 30000); 570 mnuFrameRates.MenuItems.Add(m); 571 m = new MenuItem("59.994 fps (2xNTSC)", new EventHandler(mnuFrameRates_Click)); 572 m.Checked = (frameRate == 59994); 573 mnuFrameRates.MenuItems.Add(m); 574 mnuFrameRates.Enabled = true; 575 } 576 catch { mnuFrameRates.Enabled = false; } 577 578 // Load frame sizes 579 try 580 { 581 mnuFrameSizes.MenuItems.Clear(); 582 Size frameSize = capture.FrameSize; 583 m = new MenuItem("160 x 120", new EventHandler(mnuFrameSizes_Click)); 584 m.Checked = (frameSize == new Size(160, 120)); 585 mnuFrameSizes.MenuItems.Add(m); 586 m = new MenuItem("320 x 240", new EventHandler(mnuFrameSizes_Click)); 587 m.Checked = (frameSize == new Size(320, 240)); 588 mnuFrameSizes.MenuItems.Add(m); 589 m = new MenuItem("640 x 480", new EventHandler(mnuFrameSizes_Click)); 590 m.Checked = (frameSize == new Size(640, 480)); 591 mnuFrameSizes.MenuItems.Add(m); 592 m = new MenuItem("1024 x 768", new EventHandler(mnuFrameSizes_Click)); 593 m.Checked = (frameSize == new Size(1024, 768)); 594 mnuFrameSizes.MenuItems.Add(m); 595 mnuFrameSizes.Enabled = true; 596 } 597 catch { mnuFrameSizes.Enabled = false; } 598 599 // Load audio channels 600 try 601 { 602 mnuAudioChannels.MenuItems.Clear(); 603 short audioChannels = capture.AudioChannels; 604 m = new MenuItem("单声道 Mono", new EventHandler(mnuAudioChannels_Click)); 605 m.Checked = (audioChannels == 1); 606 mnuAudioChannels.MenuItems.Add(m); 607 m = new MenuItem("立体声 Stereo", new EventHandler(mnuAudioChannels_Click)); 608 m.Checked = (audioChannels == 2); 609 mnuAudioChannels.MenuItems.Add(m); 610 mnuAudioChannels.Enabled = true; 611 } 612 catch { mnuAudioChannels.Enabled = false; } 613 614 // Load音频采样率 Load audio sampling rate 615 try 616 { 617 mnuAudioSamplingRate.MenuItems.Clear(); 618 int samplingRate = capture.AudioSamplingRate; 619 m = new MenuItem("8 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 620 m.Checked = (samplingRate == 8000); 621 mnuAudioSamplingRate.MenuItems.Add(m); 622 m = new MenuItem("11.025 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 623 m.Checked = (capture.AudioSamplingRate == 11025); 624 mnuAudioSamplingRate.MenuItems.Add(m); 625 m = new MenuItem("22.05 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 626 m.Checked = (capture.AudioSamplingRate == 22050); 627 mnuAudioSamplingRate.MenuItems.Add(m); 628 m = new MenuItem("44.1 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 629 m.Checked = (capture.AudioSamplingRate == 44100); 630 mnuAudioSamplingRate.MenuItems.Add(m); 631 mnuAudioSamplingRate.Enabled = true; 632 } 633 catch { mnuAudioSamplingRate.Enabled = false; } 634 635 // 加载音频样本大小 Load audio sample sizes 636 try 637 { 638 mnuAudioSampleSizes.MenuItems.Clear(); 639 short sampleSize = capture.AudioSampleSize; 640 m = new MenuItem("8 bit", new EventHandler(mnuAudioSampleSizes_Click)); 641 m.Checked = (sampleSize == 8); 642 mnuAudioSampleSizes.MenuItems.Add(m); 643 m = new MenuItem("16 bit", new EventHandler(mnuAudioSampleSizes_Click)); 644 m.Checked = (sampleSize == 16); 645 mnuAudioSampleSizes.MenuItems.Add(m); 646 mnuAudioSampleSizes.Enabled = true; 647 } 648 catch { mnuAudioSampleSizes.Enabled = false; } 649 650 // 加载属性页 Load property pages 651 try 652 { 653 mnuPropertyPages.MenuItems.Clear(); 654 for (int c = 0; c < capture.PropertyPages.Count; c++) 655 { 656 p = capture.PropertyPages[c]; 657 m = new MenuItem(p.Name + "...", new EventHandler(mnuPropertyPages_Click)); 658 mnuPropertyPages.MenuItems.Add(m); 659 } 660 mnuPropertyPages.Enabled = (capture.PropertyPages.Count > 0); 661 } 662 catch { mnuPropertyPages.Enabled = false; } 663 664 // Load TV Tuner channels 665 try 666 { 667 mnuChannel.MenuItems.Clear(); 668 int channel = capture.Tuner.Channel; 669 for (int c = 1; c <= 31; c++) 670 { 671 m = new MenuItem(c.ToString(), new EventHandler(mnuChannel_Click)); 672 m.Checked = (channel == c); 673 mnuChannel.MenuItems.Add(m); 674 } 675 mnuChannel.Enabled = true; 676 } 677 catch { mnuChannel.Enabled = false; } 678 679 // Load TV Tuner input types 680 try 681 { 682 mnuInputType.MenuItems.Clear(); 683 m = new MenuItem(DirectX.Capture.TunerInputType.Cable.ToString(), new EventHandler(mnuInputType_Click)); 684 m.Checked = (capture.Tuner.InputType == DirectX.Capture.TunerInputType.Cable); 685 mnuInputType.MenuItems.Add(m); 686 m = new MenuItem(DirectX.Capture.TunerInputType.Antenna.ToString(), new EventHandler(mnuInputType_Click)); 687 m.Checked = (capture.Tuner.InputType == DirectX.Capture.TunerInputType.Antenna); 688 mnuInputType.MenuItems.Add(m); 689 mnuInputType.Enabled = true; 690 } 691 catch { mnuInputType.Enabled = false; } 692 693 // Enable/disable caps 694 mnuVideoCaps.Enabled = ((capture != null) && (capture.VideoCaps != null)); 695 mnuAudioCaps.Enabled = ((capture != null) && (capture.AudioCaps != null)); 696 697 // Check Preview menu option 698 mnuPreview.Checked = (oldPreviewWindow != null); 699 mnuPreview.Enabled = (capture != null); 700 701 // Reenable preview if it was enabled before 702 if (capture != null) 703 capture.PreviewWindow = oldPreviewWindow; 704 } 705 #endregion 加载 706 707 #region 方法 708 709 private void Stop() 710 { 711 try 712 { 713 ShowDropped(); 714 capture.Stop(); 715 btnCue.Enabled = true; 716 btnStart.Enabled = true; 717 btnStop.Enabled = false; 718 txtFilename.Enabled = true; 719 btnStart.Select(); 720 } 721 catch (Exception ex) 722 { 723 MessageBox.Show(ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 724 } 725 } 726 727 private void VideoWindowResize() 728 { 729 if ((capture != null) && (m_FrameSize.Width > 0)) 730 { 731 Size ns; 732 733 int iMaxHeight = Math.Min(m_FrameSize.Height, groupBox1.Height - 9); //不要践踏我们的分组框的边界 Don't trample the borders 734 int iMaxWidth = Math.Min(m_FrameSize.Width, groupBox1.Width - 4); // of our GroupBox 735 736 int t2 = (iMaxWidth * m_FrameSize.Height) / m_FrameSize.Width; 737 738 // Which proportion do we need to limit? 739 if (t2 > iMaxHeight) 740 { 741 int t1 = (iMaxHeight * m_FrameSize.Width) / m_FrameSize.Height; 742 ns = new Size(t1, iMaxHeight); 743 } 744 else 745 { 746 ns = new Size(iMaxWidth, t2); 747 } 748 panelVideo.Size = ns; 749 } 750 } 751 752 // 更新 捕获/下降/时间字段的查询捕获装置 753 //Update the Capture/Dropped/Duration fields by quering the capture device 754 private void ShowDropped() 755 { 756 TimeSpan duDuration; 757 long iCurDropped = capture.DroppedVideoFrames; 758 long iCaptured = capture.CapturedVideoFrames; 759 760 if (iCurDropped >= 0) 761 txtDroppedFrames.Text = (iCurDropped - iDroppedBefore).ToString(); 762 763 if (iCaptured > 0) 764 txtCapturedFrames.Text = iCaptured.ToString(); 765 766 duDuration = DateTime.Now - dtBefore; 767 txtDuration.Text = duDuration.ToString(); 768 } 769 770 #endregion 方法 771 772 #region 菜单事件 773 774 775 private void mnuVideoDevices_Click(object sender, System.EventArgs e) 776 { 777 try 778 { 779 // 由于视频和音频设备只能通过创建一个新的捕获对象来改变,因此获取当前的设备和处理捕获对象。 780 // Get current devices and dispose of capture object 781 // because the video and audio device can only be changed 782 // by creating a new Capture object. 783 Filter videoDevice = null; 784 Filter audioDevice = null; 785 if (capture != null) 786 { 787 videoDevice = capture.VideoDevice; 788 audioDevice = capture.AudioDevice; 789 capture.Dispose(); 790 capture = null; 791 } 792 793 // Get new video device 794 MenuItem m = sender as MenuItem; 795 videoDevice = (m.Index > 0 ? filters.VideoInputDevices[m.Index - 1] : null); 796 797 // Create capture object 798 if ((videoDevice != null) || (audioDevice != null)) 799 { 800 capture = new 捕获(videoDevice, audioDevice); 801 capture.CaptureComplete += new EventHandler(OnCaptureComplete); 802 } 803 804 // Update the menu 805 updateMenu(); 806 } 807 catch (Exception ex) 808 { 809 MessageBox.Show("视频设备不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 810 } 811 } 812 813 private void mnuAudioDevices_Click(object sender, System.EventArgs e) 814 { 815 try 816 { 817 // Get current devices and dispose of capture object 818 // because the video and audio device can only be changed 819 // by creating a new Capture object. 820 Filter videoDevice = null; 821 Filter audioDevice = null; 822 Filter videoCompressor = null; 823 if (capture != null) 824 { 825 videoDevice = capture.VideoDevice; 826 audioDevice = capture.AudioDevice; 827 videoCompressor = capture.VideoCompressor; 828 capture.Dispose(); 829 capture = null; 830 } 831 832 // Get new audio device 833 MenuItem m = sender as MenuItem; 834 audioDevice = (m.Index > 0 ? filters.AudioInputDevices[m.Index - 1] : null); 835 836 // Create capture object 837 if ((videoDevice != null) || (audioDevice != null)) 838 { 839 capture = new 捕获(videoDevice, audioDevice); 840 capture.CaptureComplete += new EventHandler(OnCaptureComplete); 841 } 842 843 capture.VideoCompressor = videoCompressor; 844 845 // Update the menu 846 updateMenu(); 847 } 848 catch (Exception ex) 849 { 850 MessageBox.Show("音频设备不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 851 } 852 } 853 854 private void mnuVideoCompressors_Click(object sender, System.EventArgs e) 855 { 856 try 857 { 858 // Change the video compressor 859 // We subtract 1 from m.Index beacuse the first item is (None) 860 MenuItem m = sender as MenuItem; 861 capture.VideoCompressor = (m.Index > 0 ? filters.VideoCompressors[m.Index - 1] : null); 862 updateMenu(); 863 } 864 catch (Exception ex) 865 { 866 MessageBox.Show("视频压缩不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 867 } 868 869 } 870 871 private void mnuAudioCompressors_Click(object sender, System.EventArgs e) 872 { 873 try 874 { 875 // Change the audio compressor 876 // We subtract 1 from m.Index beacuse the first item is (None) 877 MenuItem m = sender as MenuItem; 878 capture.AudioCompressor = (m.Index > 0 ? filters.AudioCompressors[m.Index - 1] : null); 879 updateMenu(); 880 } 881 catch (Exception ex) 882 { 883 MessageBox.Show("音频压缩不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 884 } 885 } 886 887 private void mnuVideoSources_Click(object sender, System.EventArgs e) 888 { 889 try 890 { 891 // Choose the video source 892 // If the device only has one source, this menu item will be disabled 893 MenuItem m = sender as MenuItem; 894 capture.VideoSource = capture.VideoSources[m.Index]; 895 updateMenu(); 896 } 897 catch (Exception ex) 898 { 899 MessageBox.Show("无法设置视频源。请提交错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 900 } 901 } 902 903 private void mnuAudioSources_Click(object sender, System.EventArgs e) 904 { 905 try 906 { 907 // Choose the audio source 908 // If the device only has one source, this menu item will be disabled 909 MenuItem m = sender as MenuItem; 910 capture.AudioSource = capture.AudioSources[m.Index]; 911 updateMenu(); 912 } 913 catch (Exception ex) 914 { 915 MessageBox.Show("无法设置音频源。请提交错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 916 } 917 } 918 919 920 private void mnuExit_Click(object sender, System.EventArgs e) 921 { 922 if (capture != null) 923 capture.Stop(); 924 Application.Exit(); 925 } 926 927 private void mnuFrameSizes_Click(object sender, System.EventArgs e) 928 { 929 try 930 { 931 // Disable preview to avoid additional flashes (optional) 932 bool preview = (capture.PreviewWindow != null); 933 capture.PreviewWindow = null; 934 935 // Update the frame size 936 MenuItem m = sender as MenuItem; 937 string[] s = m.Text.Split('x'); 938 Size size = new Size(int.Parse(s[0]), int.Parse(s[1])); 939 capture.FrameSize = size; 940 941 // Update the menu 942 updateMenu(); 943 944 // Restore previous preview setting 945 capture.PreviewWindow = (preview ? panelVideo : null); 946 } 947 catch (Exception ex) 948 { 949 MessageBox.Show("帧大小不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 950 } 951 } 952 953 private void mnuFrameRates_Click(object sender, System.EventArgs e) 954 { 955 try 956 { 957 MenuItem m = sender as MenuItem; 958 string[] s = m.Text.Split(' '); 959 capture.FrameRate = double.Parse(s[0]); 960 updateMenu(); 961 } 962 catch (Exception ex) 963 { 964 MessageBox.Show("不支持的帧速率.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 965 } 966 } 967 968 private void mnuAudioChannels_Click(object sender, System.EventArgs e) 969 { 970 try 971 { 972 MenuItem m = sender as MenuItem; 973 capture.AudioChannels = (short)Math.Pow(2, m.Index); 974 updateMenu(); 975 } 976 catch (Exception ex) 977 { 978 MessageBox.Show("不支持的音频信道数.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 979 } 980 } 981 982 private void mnuAudioSamplingRate_Click(object sender, System.EventArgs e) 983 { 984 try 985 { 986 MenuItem m = sender as MenuItem; 987 string[] s = m.Text.Split(' '); 988 int samplingRate = (int)(double.Parse(s[0]) * 1000); 989 capture.AudioSamplingRate = samplingRate; 990 updateMenu(); 991 } 992 catch (Exception ex) 993 { 994 MessageBox.Show("不支持音频采样率.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 995 } 996 } 997 998 private void mnuAudioSampleSizes_Click(object sender, System.EventArgs e) 999 {1000 try1001 {1002 MenuItem m = sender as MenuItem;1003 string[] s = m.Text.Split(' ');1004 short sampleSize = short.Parse(s[0]);1005 capture.AudioSampleSize = sampleSize;1006 updateMenu();1007 }1008 catch (Exception ex)1009 {1010 MessageBox.Show("音频样本大小不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1011 }1012 }1013 1014 private void mnuPreview_Click(object sender, System.EventArgs e)1015 {1016 try1017 {1018 if (capture.PreviewWindow == null)1019 {1020 capture.PreviewWindow = panelVideo;1021 mnuPreview.Checked = true;1022 }1023 else1024 {1025 capture.PreviewWindow = null;1026 mnuPreview.Checked = false;1027 }1028 }1029 catch (Exception ex)1030 {1031 MessageBox.Show("无法启用/禁用预览。请提交一个错误报告。\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1032 }1033 }1034 1035 private void mnuPropertyPages_Click(object sender, System.EventArgs e)1036 {1037 try1038 {1039 MenuItem m = sender as MenuItem;1040 capture.PropertyPages[m.Index].Show(this);1041 updateMenu();1042 }1043 catch (Exception ex)1044 {1045 MessageBox.Show("无法显示属性页。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1046 }1047 }1048 1049 private void mnuChannel_Click(object sender, System.EventArgs e)1050 {1051 try1052 {1053 MenuItem m = sender as MenuItem;1054 capture.Tuner.Channel = m.Index + 1;1055 updateMenu();1056 }1057 catch (Exception ex)1058 {1059 MessageBox.Show("无法更改通道。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1060 }1061 }1062 1063 private void mnuInputType_Click(object sender, System.EventArgs e)1064 {1065 try1066 {1067 MenuItem m = sender as MenuItem;1068 capture.Tuner.InputType = (DirectX.Capture.TunerInputType)m.Index;1069 updateMenu();1070 }1071 catch (Exception ex)1072 {1073 MessageBox.Show("无法更改调谐器输入类型。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1074 }1075 }1076 1077 private void mnuVideoCaps_Click(object sender, System.EventArgs e)1078 {1079 try1080 {1081 string s;1082 s = String.Format(1083 "输入尺寸:\t\t{0} x {1}\n" +1084 "\n" +1085 "最小帧长度:\t\t{2} x {3}\n" +//最小帧长度1086 "最大帧长度:\t\t{4} x {5}\n" +//最大帧长度1087 "帧尺寸粒度 X:\t{6}\n" +//帧大小粒度1088 "帧尺寸粒度 Y:\t{7}\n" +1089 "\n" +1090 "最小帧速率:\t\t{8:0.000} fps\n" +//最小帧速率1091 "最大帧速率:\t\t{9:0.000} fps\n",1092 capture.VideoCaps.InputSize.Width, capture.VideoCaps.InputSize.Height,1093 capture.VideoCaps.MinFrameSize.Width, capture.VideoCaps.MinFrameSize.Height,1094 capture.VideoCaps.MaxFrameSize.Width, capture.VideoCaps.MaxFrameSize.Height,1095 capture.VideoCaps.FrameSizeGranularityX,1096 capture.VideoCaps.FrameSizeGranularityY,1097 capture.VideoCaps.MinFrameRate,1098 capture.VideoCaps.MaxFrameRate);1099 MessageBox.Show(s, "视频设备能力", MessageBoxButtons.OK, MessageBoxIcon.Information);1100 1101 }1102 catch (Exception ex)1103 {1104 MessageBox.Show("无法显示视频功能。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1105 }1106 }1107 1108 private void mnuAudioCaps_Click(object sender, System.EventArgs e)1109 {1110 try1111 {1112 string s;1113 s = String.Format(1114 "Min Channels:\t\t{0}\n" +1115 "Max Channels:\t\t{1}\n" +1116 "Channels Granularity:\t{2}\n" +1117 "\n" +1118 "Min Sample Size:\t\t{3}\n" +1119 "Max Sample Size:\t\t{4}\n" +1120 "Sample Size Granularity:\t{5}\n" +1121 "\n" +1122 "Min Sampling Rate:\t\t{6}\n" +1123 "Max Sampling Rate:\t\t{7}\n" +1124 "Sampling Rate Granularity:\t{8}\n",1125 capture.AudioCaps.MinimumChannels,1126 capture.AudioCaps.MaximumChannels,1127 capture.AudioCaps.ChannelsGranularity,1128 capture.AudioCaps.MinimumSampleSize,1129 capture.AudioCaps.MaximumSampleSize,1130 capture.AudioCaps.SampleSizeGranularity,1131 capture.AudioCaps.MinimumSamplingRate,1132 capture.AudioCaps.MaximumSamplingRate,1133 capture.AudioCaps.SamplingRateGranularity);1134 MessageBox.Show(s, "音频设备能力", MessageBoxButtons.OK, MessageBoxIcon.Information);1135 1136 }1137 catch (Exception ex)1138 {1139 MessageBox.Show("Unable display audio capabilities. Please submit a bug report.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1140 }1141 }1142 1143 // 单击“菜单”选项显示压缩机属性 On clicking the menu option to display Compressor Properties1144 private void mnuCompressionProps_Click(object sender, System.EventArgs e)1145 {1146 // Prepare to show the form1147 CompressionProps m = new CompressionProps();1148 1149 // Read what compression capabilities are available1150 CompressionCaps i = capture.VideoCompressorCaps.GetCaps;1151 1152 bool bSet = (i & CompressionCaps.CanKeyFrame) > 0;1153 1154 // Enable the available keyframe controls1155 m.txtKeyFrame.Enabled = bSet;1156 m.labKeyFrame.Enabled = bSet;1157 m.chkKeyFrame.Enabled = bSet;1158 1159 // copy in the default values1160 if (bSet)1161 {1162 long v = capture.VideoCompressorCaps.KeyFrameRate;1163 1164 // Using default?1165 if (v < 0)1166 {1167 m.txtKeyFrame.Text = "";1168 m.chkKeyFrame.Checked = true;1169 m.txtKeyFrame.Enabled = false;1170 }1171 else1172 {1173 m.txtKeyFrame.Text = v.ToString();1174 m.chkKeyFrame.Checked = false;1175 }1176 }1177 1178 bSet = (i & CompressionCaps.CanBFrame) > 0;1179 1180 // Enable the available PFrames controls1181 m.txtPFrames.Enabled = bSet;1182 m.labPFrames.Enabled = bSet;1183 m.chkPFrames.Enabled = bSet;1184 if (bSet)1185 {1186 long v = capture.VideoCompressorCaps.PFramesPerKeyFrame;1187 1188 // Using default?1189 if (v < 0)1190 {1191 m.txtPFrames.Text = "";1192 m.chkPFrames.Checked = true;1193 m.txtPFrames.Enabled = false;1194 }1195 else1196 {1197 m.txtPFrames.Text = v.ToString();1198 m.chkPFrames.Checked = false;1199 }1200 }1201 1202 bSet = (i & CompressionCaps.CanWindow) > 0;1203 1204 // Enable the available WindowSize controls1205 m.txtWindowSize.Enabled = bSet;1206 m.labWindowSize.Enabled = bSet;1207 m.chkWindowSize.Enabled = bSet;1208 m.chkWindowSize.Checked = false;1209 1210 if (bSet)1211 {1212 m.txtWindowSize.Text = capture.VideoCompressorCaps.WindowSize.ToString();1213 }1214 1215 bSet = (i & CompressionCaps.CanQuality) > 0;1216 1217 // Enable the available Quality controls1218 m.txtQuality.Enabled = bSet;1219 m.trkQuality.Enabled = bSet;1220 m.labQuality.Enabled = bSet;1221 m.chkQuality.Enabled = bSet;1222 if (bSet)1223 {1224 long v = capture.VideoCompressorCaps.Quality;1225 1226 // Using default?1227 if (v < 0)1228 {1229 m.txtQuality.Text = "";1230 m.chkQuality.Checked = true;1231 m.trkQuality.Value = 0;1232 m.trkQuality.Enabled = false;1233 m.txtQuality.Enabled = false;1234 }1235 else1236 {1237 m.txtQuality.Text = v.ToString();1238 m.chkQuality.Checked = false;1239 m.trkQuality.Value = capture.VideoCompressorCaps.Quality;1240 }1241 }1242 1243 // Display the form1244 DialogResult a = m.ShowDialog(this);1245 1246 // If the user clicked OK, set the values they specified1247 if (DialogResult.OK == a)1248 {1249 if ((i & CompressionCaps.CanKeyFrame) > 0)1250 {1251 int v;1252 if (m.chkKeyFrame.Checked)1253 {1254 // Use default1255 v = -1;1256 }1257 else1258 {1259 v = Convert.ToInt32(m.txtKeyFrame.Text);1260 }1261 capture.VideoCompressorCaps.KeyFrameRate = v;1262 }1263 1264 if ((i & CompressionCaps.CanBFrame) > 0)1265 {1266 int v;1267 if (m.chkPFrames.Checked)1268 {1269 // Use default1270 v = -1;1271 }1272 else1273 {1274 v = Convert.ToInt32(m.txtPFrames.Text);1275 }1276 capture.VideoCompressorCaps.PFramesPerKeyFrame = v;1277 }1278 1279 if ((i & CompressionCaps.CanWindow) > 0)1280 {1281 long v;1282 if (m.chkWindowSize.Checked)1283 {1284 // Use default1285 v = 1;1286 }1287 else1288 {1289 v = Convert.ToInt64(m.txtWindowSize.Text);1290 }1291 capture.VideoCompressorCaps.WindowSize = v;1292 }1293 1294 if ((i & CompressionCaps.CanQuality) > 0)1295 {1296 int v;1297 1298 if (m.chkQuality.Checked)1299 {1300 // Use default1301 v = -1;1302 }1303 else1304 {1305 v = Convert.ToInt32(m.txtQuality.Text);1306 }1307 capture.VideoCompressorCaps.Quality = v;1308 }1309 }1310 }1311 1312 #endregion 菜单事件1313 1314 #region 事件1315 1316 1317 private void btnExit_Click(object sender, System.EventArgs e)1318 {1319 if (capture != null)1320 {1321 capture.Stop();1322 SaveDefaults();1323 }1324 Application.Exit();1325 }1326 1327 private void btnCue_Click(object sender, System.EventArgs e)1328 {1329 try1330 {1331 if (capture == null)1332 throw new ApplicationException("请选择一个视频和/或音频设备.");1333 if (!capture.Cued)1334 capture.Filename = txtFilename.Text;1335 1336 CaptureResult = 0;1337 txtDroppedFrames.Text = "0";1338 txtCapturedFrames.Text = "0";1339 txtDuration.Text = "";1340 txtFilename.Enabled = false;1341 1342 capture.Cue();1343 capture.PreSize(Convert.ToInt64(txtPreSize.Text) * 1024000);1344 1345 btnCue.Enabled = false;1346 btnStop.Enabled = true;1347 //“使用cue() 先于 start() 做的所有准备工作,1348 //需要做的事开始捕捉。现在,当您单击“开始”时,1349 //捕获的速度将比您刚刚单击“启动”开始的速度更快。1350 //使用cue()完全是可选的。使用cue()坏处是预览被禁用,直到捕获开始。1351 MessageBox.Show("Use Cue() before Start() to " +1352 "do all the preparation work that needs to be done to start a " +1353 "capture. Now, when you click Start the capture will begin faster " +1354 "than if you had just clicked Start. Using Cue() is completely " +1355 "optional. The downside to using Cue() is the preview is disabled until " +1356 "the capture begins.", "Ready to Capture", MessageBoxButtons.OK, MessageBoxIcon.Information);1357 btnStart.Select();1358 }1359 catch (Exception ex)1360 {1361 MessageBox.Show(ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1362 }1363 }1364 1365 private void btnStart_Click(object sender, System.EventArgs e)1366 {1367 try1368 {1369 if (capture == null)1370 throw new ApplicationException("请选择一个视频和/或音频设备。");1371 if (!capture.Cued)1372 capture.Filename = txtFilename.Text;1373 1374 CaptureResult = 0;1375 iDroppedBefore = capture.DroppedVideoFrames;1376 dtBefore = DateTime.Now;1377 txtDroppedFrames.Text = "0";1378 txtCapturedFrames.Text = "0";1379 txtDuration.Text = "";1380 txtFilename.Enabled = false;1381 capture.Start();1382 tmrTime1.Enabled = true;1383 btnCue.Enabled = false;1384 btnStart.Enabled = false;1385 btnStop.Enabled = true;1386 btnStop.Select();1387 }1388 catch (Exception ex)1389 {1390 MessageBox.Show(ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1391 }1392 }1393 1394 private void btnStop_Click(object sender, System.EventArgs e)1395 {1396 Stop();1397 }1398 1399 1400 private void OnCaptureComplete(object sender, EventArgs e)1401 {1402 // 显示捕获捕获完成事件 Demonstrate the Capture.CaptureComplete event.1403 tmrTime1.Enabled = false;1404 1405 // 如果窗口消息处理程序中止了我们… If the windows message handler aborted us...1406 if (CaptureResult != 0)//捕获的结果1407 MessageBox.Show("Capture Error 0x" + CaptureResult.ToString("x"), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1408 }1409 1410 // Update the Captured/Dropped fields while capturing1411 private void tmrTime1_Tick(Object myObject, EventArgs myEventArgs)1412 {1413 if (CaptureResult == 0)1414 {1415 ShowDropped();1416 }1417 else1418 {1419 Stop();1420 }1421 }1422 1423 1424 private void groupBox1_Resize(object sender, System.EventArgs e)1425 {1426 VideoWindowResize();1427 }1428 1429 #endregion 事件1430 // http://www.cnblogs.com/endv/p/6052511.html1431 1432 #region private1433 private System.Windows.Forms.TextBox txtFilename;1434 private System.Windows.Forms.Label label1;1435 private System.Windows.Forms.Button btnStart;1436 private System.Windows.Forms.Button btnStop;1437 private System.Windows.Forms.Button btnExit;1438 private System.Windows.Forms.MenuItem menuItem1;1439 private System.Windows.Forms.MenuItem menuItem7;1440 private System.Windows.Forms.MainMenu mainMenu;1441 private System.Windows.Forms.MenuItem mnuExit;1442 private System.Windows.Forms.MenuItem mnuDevices;1443 private System.Windows.Forms.MenuItem mnuVideoDevices;1444 private System.Windows.Forms.MenuItem mnuAudioDevices;1445 private System.Windows.Forms.MenuItem mnuVideoCompressors;1446 private System.Windows.Forms.MenuItem mnuAudioCompressors;1447 private System.Windows.Forms.MenuItem mnuVideoSources;1448 private System.Windows.Forms.MenuItem mnuAudioSources;1449 private System.Windows.Forms.Panel panelVideo;1450 private System.Windows.Forms.MenuItem menuItem4;1451 private System.Windows.Forms.MenuItem mnuAudioChannels;1452 private System.Windows.Forms.MenuItem mnuAudioSamplingRate;1453 private System.Windows.Forms.MenuItem mnuAudioSampleSizes;1454 private System.Windows.Forms.MenuItem menuItem5;1455 private System.Windows.Forms.MenuItem mnuFrameSizes;1456 private System.Windows.Forms.MenuItem mnuFrameRates;1457 private System.Windows.Forms.Button btnCue;1458 private System.Windows.Forms.MenuItem menuItem6;1459 private System.Windows.Forms.MenuItem mnuPreview;1460 private System.Windows.Forms.MenuItem menuItem8;1461 private System.Windows.Forms.MenuItem mnuPropertyPages;1462 private System.Windows.Forms.MenuItem mnuVideoCaps;1463 private System.Windows.Forms.MenuItem mnuAudioCaps;1464 private System.Windows.Forms.MenuItem mnuChannel;1465 private System.Windows.Forms.MenuItem menuItem3;1466 private System.Windows.Forms.MenuItem mnuInputType;1467 private System.Windows.Forms.TextBox txtDroppedFrames;1468 private System.Windows.Forms.Label label2;1469 private System.Windows.Forms.Timer tmrTime1;1470 private System.Windows.Forms.Label label3;1471 private System.Windows.Forms.TextBox txtDuration;1472 private System.Windows.Forms.Label label4;1473 private System.Windows.Forms.TextBox txtCapturedFrames;1474 private System.Windows.Forms.MenuItem mnuCompressionProps;1475 private System.Windows.Forms.GroupBox groupBox1;1476 private System.Windows.Forms.Label label5;1477 private System.Windows.Forms.TextBox txtPreSize;1478 private System.ComponentModel.IContainer components;1479 #endregion private1480 1481 ///1482 /// Clean up any resources being used.1483 /// 1484 protected override void Dispose(bool disposing)1485 {1486 if (disposing)1487 {1488 if (components != null)1489 {1490 components.Dispose();1491 }1492 }1493 base.Dispose(disposing);1494 }1495 // 媒体事件发送使用Windows消息 Media events are sent to use as windows messages1496 protected override void WndProc(ref Message m)1497 {1498 switch (m.Msg)1499 {1500 // If this is a windows media message1501 case WM_GRAPHNOTIFY:1502 EventCode eventCode;//捕获已中止?1503 IntPtr p1, p2;1504 int hr;1505 1506 hr = mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);1507 while (hr == 0)1508 {1509 // 处理事件 1510 // 捕获已中止 The capture has been aborted1511 if (eventCode == EventCode.ErrorAbort)1512 {1513 CaptureResult = p1.ToInt32();1514 }1515 1516 // 释放参数 1517 mediaEvent.FreeEventParams(eventCode, p1, p2);1518 1519 // 1520 // 检查附加事件 check for additional events1521 hr = mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);1522 }1523 break;1524 1525 // 所有其它的消息 All other messages1526 default:1527 // 未经处理的窗口消息 unhandled window message1528 base.WndProc(ref m);1529 break;1530 }1531 }1532 1533 1534 #region Windows Form Designer generated code1535 ///1536 /// Required method for Designer support - do not modify1537 /// the contents of this method with the code editor.1538 /// 1539 private void InitializeComponent()1540 { // http://www.cnblogs.com/endv/p/6052511.html1541 1542 this.components = new System.ComponentModel.Container();1543 this.txtFilename = new System.Windows.Forms.TextBox();1544 this.label1 = new System.Windows.Forms.Label();1545 this.btnStart = new System.Windows.Forms.Button();1546 this.btnStop = new System.Windows.Forms.Button();1547 this.btnExit = new System.Windows.Forms.Button();1548 this.mainMenu = new System.Windows.Forms.MainMenu(this.components);1549 this.menuItem1 = new System.Windows.Forms.MenuItem();1550 this.mnuExit = new System.Windows.Forms.MenuItem();1551 this.mnuDevices = new System.Windows.Forms.MenuItem();1552 this.mnuVideoDevices = new System.Windows.Forms.MenuItem();1553 this.mnuAudioDevices = new System.Windows.Forms.MenuItem();1554 this.menuItem4 = new System.Windows.Forms.MenuItem();1555 this.mnuVideoCompressors = new System.Windows.Forms.MenuItem();1556 this.mnuAudioCompressors = new System.Windows.Forms.MenuItem();1557 this.menuItem7 = new System.Windows.Forms.MenuItem();1558 this.mnuVideoSources = new System.Windows.Forms.MenuItem();1559 this.mnuFrameSizes = new System.Windows.Forms.MenuItem();1560 this.mnuFrameRates = new System.Windows.Forms.MenuItem();1561 this.mnuVideoCaps = new System.Windows.Forms.MenuItem();1562 this.menuItem5 = new System.Windows.Forms.MenuItem();1563 this.mnuAudioSources = new System.Windows.Forms.MenuItem();1564 this.mnuAudioChannels = new System.Windows.Forms.MenuItem();1565 this.mnuAudioSamplingRate = new System.Windows.Forms.MenuItem();1566 this.mnuAudioSampleSizes = new System.Windows.Forms.MenuItem();1567 this.mnuAudioCaps = new System.Windows.Forms.MenuItem();1568 this.menuItem3 = new System.Windows.Forms.MenuItem();1569 this.mnuChannel = new System.Windows.Forms.MenuItem();1570 this.mnuInputType = new System.Windows.Forms.MenuItem();1571 this.menuItem6 = new System.Windows.Forms.MenuItem();1572 this.mnuCompressionProps = new System.Windows.Forms.MenuItem();1573 this.mnuPropertyPages = new System.Windows.Forms.MenuItem();1574 this.menuItem8 = new System.Windows.Forms.MenuItem();1575 this.mnuPreview = new System.Windows.Forms.MenuItem();1576 this.panelVideo = new System.Windows.Forms.Panel();1577 this.btnCue = new System.Windows.Forms.Button();1578 this.txtDroppedFrames = new System.Windows.Forms.TextBox();1579 this.label2 = new System.Windows.Forms.Label();1580 this.tmrTime1 = new System.Windows.Forms.Timer(this.components);1581 this.txtDuration = new System.Windows.Forms.TextBox();1582 this.label3 = new System.Windows.Forms.Label();1583 this.label4 = new System.Windows.Forms.Label();1584 this.txtCapturedFrames = new System.Windows.Forms.TextBox();1585 this.groupBox1 = new System.Windows.Forms.GroupBox();1586 this.txtPreSize = new System.Windows.Forms.TextBox();1587 this.label5 = new System.Windows.Forms.Label();1588 this.groupBox1.SuspendLayout();1589 this.SuspendLayout();1590 // 1591 // txtFilename1592 // 1593 this.txtFilename.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1594 this.txtFilename.Location = new System.Drawing.Point(239, 330);1595 this.txtFilename.Name = "txtFilename";1596 this.txtFilename.Size = new System.Drawing.Size(182, 21);1597 this.txtFilename.TabIndex = 0;1598 this.txtFilename.Text = "test.avi";1599 // 1600 // label11601 // 1602 this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1603 this.label1.Location = new System.Drawing.Point(172, 330);1604 this.label1.Name = "label1";1605 this.label1.Size = new System.Drawing.Size(76, 17);1606 this.label1.TabIndex = 1;1607 this.label1.Text = "文件名:";1608 // 1609 // btnStart1610 // 1611 this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1612 this.btnStart.Location = new System.Drawing.Point(258, 364);1613 this.btnStart.Name = "btnStart";1614 this.btnStart.Size = new System.Drawing.Size(77, 26);1615 this.btnStart.TabIndex = 2;1616 this.btnStart.Text = "开始";1617 this.btnStart.Click += new System.EventHandler(this.btnStart_Click);1618 // 1619 // btnStop1620 // 1621 this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1622 this.btnStop.Enabled = false;1623 this.btnStop.Location = new System.Drawing.Point(344, 364);1624 this.btnStop.Name = "btnStop";1625 this.btnStop.Size = new System.Drawing.Size(77, 26);1626 this.btnStop.TabIndex = 3;1627 this.btnStop.Text = "停止";1628 this.btnStop.Click += new System.EventHandler(this.btnStop_Click);1629 // 1630 // btnExit1631 // 1632 this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1633 this.btnExit.Location = new System.Drawing.Point(440, 364);1634 this.btnExit.Name = "btnExit";1635 this.btnExit.Size = new System.Drawing.Size(87, 26);1636 this.btnExit.TabIndex = 4;1637 this.btnExit.Text = "退出";1638 this.btnExit.Click += new System.EventHandler(this.btnExit_Click);1639 // 1640 // mainMenu1641 // 1642 this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1643 this.menuItem1,1644 this.mnuDevices,1645 this.menuItem7});1646 // 1647 // menuItem11648 // 1649 this.menuItem1.Index = 0;1650 this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1651 this.mnuExit});1652 this.menuItem1.Text = "文件";1653 // 1654 // mnuExit1655 // 1656 this.mnuExit.Index = 0;1657 this.mnuExit.Text = "E&xit";1658 this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);1659 // 1660 // mnuDevices1661 // 1662 this.mnuDevices.Index = 1;1663 this.mnuDevices.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1664 this.mnuVideoDevices,1665 this.mnuAudioDevices,1666 this.menuItem4,1667 this.mnuVideoCompressors,1668 this.mnuAudioCompressors});1669 this.mnuDevices.Text = "设备";1670 // 1671 // mnuVideoDevices1672 // 1673 this.mnuVideoDevices.Index = 0;1674 this.mnuVideoDevices.Text = "视频设备";1675 // 1676 // mnuAudioDevices1677 // 1678 this.mnuAudioDevices.Index = 1;1679 this.mnuAudioDevices.Text = "音频设备";1680 // 1681 // menuItem41682 // 1683 this.menuItem4.Index = 2;1684 this.menuItem4.Text = "-";1685 // 1686 // mnuVideoCompressors1687 // 1688 this.mnuVideoCompressors.Index = 3;1689 this.mnuVideoCompressors.Text = "视频压缩";1690 // 1691 // mnuAudioCompressors1692 // 1693 this.mnuAudioCompressors.Index = 4;1694 this.mnuAudioCompressors.Text = "音频压缩";1695 // 1696 // menuItem71697 // 1698 this.menuItem7.Index = 2;1699 this.menuItem7.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1700 this.mnuVideoSources,1701 this.mnuFrameSizes,1702 this.mnuFrameRates,1703 this.mnuVideoCaps,1704 this.menuItem5,1705 this.mnuAudioSources,1706 this.mnuAudioChannels,1707 this.mnuAudioSamplingRate,1708 this.mnuAudioSampleSizes,1709 this.mnuAudioCaps,1710 this.menuItem3,1711 this.mnuChannel,1712 this.mnuInputType,1713 this.menuItem6,1714 this.mnuCompressionProps,1715 this.mnuPropertyPages,1716 this.menuItem8,1717 this.mnuPreview});1718 this.menuItem7.Text = "选项";1719 // 1720 // mnuVideoSources1721 // 1722 this.mnuVideoSources.Index = 0;1723 this.mnuVideoSources.Text = "视频源";1724 // 1725 // mnuFrameSizes1726 // 1727 this.mnuFrameSizes.Index = 1;1728 this.mnuFrameSizes.Text = "视频帧的大小";1729 // 1730 // mnuFrameRates1731 // 1732 this.mnuFrameRates.Index = 2;1733 this.mnuFrameRates.Text = "视频的帧速率";1734 this.mnuFrameRates.Click += new System.EventHandler(this.mnuFrameRates_Click);1735 // 1736 // mnuVideoCaps1737 // 1738 this.mnuVideoCaps.Index = 3;1739 this.mnuVideoCaps.Text = "视频特性";1740 this.mnuVideoCaps.Click += new System.EventHandler(this.mnuVideoCaps_Click);1741 // 1742 // menuItem51743 // 1744 this.menuItem5.Index = 4;1745 this.menuItem5.Text = "-";1746 // 1747 // mnuAudioSources1748 // 1749 this.mnuAudioSources.Index = 5;1750 this.mnuAudioSources.Text = "音频源";1751 // 1752 // mnuAudioChannels1753 // 1754 this.mnuAudioChannels.Index = 6;1755 this.mnuAudioChannels.Text = "音频通道";1756 // 1757 // mnuAudioSamplingRate1758 // 1759 this.mnuAudioSamplingRate.Index = 7;1760 this.mnuAudioSamplingRate.Text = "音频采样率";1761 // 1762 // mnuAudioSampleSizes1763 // 1764 this.mnuAudioSampleSizes.Index = 8;1765 this.mnuAudioSampleSizes.Text = "音频样本大小";1766 // 1767 // mnuAudioCaps1768 // 1769 this.mnuAudioCaps.Index = 9;1770 this.mnuAudioCaps.Text = "音频功能...";1771 this.mnuAudioCaps.Click += new System.EventHandler(this.mnuAudioCaps_Click);1772 // 1773 // menuItem31774 // 1775 this.menuItem3.Index = 10;1776 this.menuItem3.Text = "-";1777 // 1778 // mnuChannel1779 // 1780 this.mnuChannel.Index = 11;1781 this.mnuChannel.Text = "TV调谐器频道";1782 // 1783 // mnuInputType1784 // 1785 this.mnuInputType.Index = 12;1786 this.mnuInputType.Text = "TV 调谐器输入类型";1787 this.mnuInputType.Click += new System.EventHandler(this.mnuInputType_Click);1788 // 1789 // menuItem61790 // 1791 this.menuItem6.Index = 13;1792 this.menuItem6.Text = "-";1793 // 1794 // mnuCompressionProps1795 // 1796 this.mnuCompressionProps.Index = 14;1797 this.mnuCompressionProps.Text = "压缩道具...";1798 this.mnuCompressionProps.Click += new System.EventHandler(this.mnuCompressionProps_Click);1799 // 1800 // mnuPropertyPages1801 // 1802 this.mnuPropertyPages.Index = 15;1803 this.mnuPropertyPages.Text = "属性页";1804 // 1805 // menuItem81806 // 1807 this.menuItem8.Index = 16;1808 this.menuItem8.Text = "-";1809 // 1810 // mnuPreview1811 // 1812 this.mnuPreview.Index = 17;1813 this.mnuPreview.Text = "预览";1814 this.mnuPreview.Click += new System.EventHandler(this.mnuPreview_Click);1815 // 1816 // panelVideo1817 // 1818 this.panelVideo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)1819 | System.Windows.Forms.AnchorStyles.Left)1820 | System.Windows.Forms.AnchorStyles.Right)));1821 this.panelVideo.Location = new System.Drawing.Point(2, 8);1822 this.panelVideo.Name = "panelVideo";1823 this.panelVideo.Size = new System.Drawing.Size(735, 303);1824 this.panelVideo.TabIndex = 6;1825 // 1826 // btnCue1827 // 1828 this.btnCue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1829 this.btnCue.Location = new System.Drawing.Point(172, 364);1830 this.btnCue.Name = "btnCue";1831 this.btnCue.Size = new System.Drawing.Size(76, 26);1832 this.btnCue.TabIndex = 1;1833 this.btnCue.Text = "提示";1834 this.btnCue.Click += new System.EventHandler(this.btnCue_Click);1835 // 1836 // txtDroppedFrames1837 // 1838 this.txtDroppedFrames.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1839 this.txtDroppedFrames.CausesValidation = false;1840 this.txtDroppedFrames.Location = new System.Drawing.Point(680, 330);1841 this.txtDroppedFrames.Name = "txtDroppedFrames";1842 this.txtDroppedFrames.ReadOnly = true;1843 this.txtDroppedFrames.Size = new System.Drawing.Size(68, 21);1844 this.txtDroppedFrames.TabIndex = 9;1845 this.txtDroppedFrames.TabStop = false;1846 this.txtDroppedFrames.Text = "0";1847 // 1848 // label21849 // 1850 this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1851 this.label2.Location = new System.Drawing.Point(613, 330);1852 this.label2.Name = "label2";1853 this.label2.Size = new System.Drawing.Size(58, 25);1854 this.label2.TabIndex = 10;1855 this.label2.Text = "丢帧";1856 // 1857 // tmrTime11858 // 1859 this.tmrTime1.Interval = 999;1860 this.tmrTime1.Tick += new System.EventHandler(this.tmrTime1_Tick);1861 // 1862 // txtDuration1863 // 1864 this.txtDuration.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1865 this.txtDuration.Location = new System.Drawing.Point(527, 338);1866 this.txtDuration.Name = "txtDuration";1867 this.txtDuration.ReadOnly = true;1868 this.txtDuration.Size = new System.Drawing.Size(77, 21);1869 this.txtDuration.TabIndex = 11;1870 this.txtDuration.TabStop = false;1871 // 1872 // label31873 // 1874 this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1875 this.label3.Location = new System.Drawing.Point(536, 321);1876 this.label3.Name = "label3";1877 this.label3.Size = new System.Drawing.Size(58, 17);1878 this.label3.TabIndex = 12;1879 this.label3.Text = "持续时间";1880 // 1881 // label41882 // 1883 this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1884 this.label4.Location = new System.Drawing.Point(604, 364);1885 this.label4.Name = "label4";1886 this.label4.Size = new System.Drawing.Size(67, 26);1887 this.label4.TabIndex = 13;1888 this.label4.Text = "捕获帧";1889 // 1890 // txtCapturedFrames1891 // 1892 this.txtCapturedFrames.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1893 this.txtCapturedFrames.Location = new System.Drawing.Point(680, 364);1894 this.txtCapturedFrames.Name = "txtCapturedFrames";1895 this.txtCapturedFrames.ReadOnly = true;1896 this.txtCapturedFrames.Size = new System.Drawing.Size(68, 21);1897 this.txtCapturedFrames.TabIndex = 14;1898 this.txtCapturedFrames.TabStop = false;1899 this.txtCapturedFrames.Text = "0";1900 // 1901 // groupBox11902 // 1903 this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)1904 | System.Windows.Forms.AnchorStyles.Left)1905 | System.Windows.Forms.AnchorStyles.Right)));1906 this.groupBox1.Controls.Add(this.panelVideo);1907 this.groupBox1.Location = new System.Drawing.Point(10, 9);1908 this.groupBox1.Name = "groupBox1";1909 this.groupBox1.Size = new System.Drawing.Size(738, 312);1910 this.groupBox1.TabIndex = 15;1911 this.groupBox1.TabStop = false;1912 this.groupBox1.Resize += new System.EventHandler(this.groupBox1_Resize);1913 // 1914 // txtPreSize1915 // 1916 this.txtPreSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1917 this.txtPreSize.Location = new System.Drawing.Point(440, 338);1918 this.txtPreSize.Name = "txtPreSize";1919 this.txtPreSize.Size = new System.Drawing.Size(77, 21);1920 this.txtPreSize.TabIndex = 16;1921 this.txtPreSize.Text = "0";1922 this.txtPreSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;1923 // 1924 // label51925 // 1926 this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1927 this.label5.Location = new System.Drawing.Point(431, 321);1928 this.label5.Name = "label5";1929 this.label5.Size = new System.Drawing.Size(96, 17);1930 this.label5.TabIndex = 17;1931 this.label5.Text = "Pre-Size (Meg)";1932 this.label5.TextAlign = System.Drawing.ContentAlignment.TopCenter;1933 // 1934 // CaptureTest1935 // 1936 this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);1937 this.ClientSize = new System.Drawing.Size(757, 404);1938 this.Controls.Add(this.label5);1939 this.Controls.Add(this.txtPreSize);1940 this.Controls.Add(this.groupBox1);1941 this.Controls.Add(this.txtCapturedFrames);1942 this.Controls.Add(this.label4);1943 this.Controls.Add(this.label3);1944 this.Controls.Add(this.txtDuration);1945 this.Controls.Add(this.label2);1946 this.Controls.Add(this.txtDroppedFrames);1947 this.Controls.Add(this.btnCue);1948 this.Controls.Add(this.btnExit);1949 this.Controls.Add(this.btnStop);1950 this.Controls.Add(this.btnStart);1951 this.Controls.Add(this.txtFilename);1952 this.Controls.Add(this.label1);1953 this.Menu = this.mainMenu;1954 this.Name = "CaptureTest";1955 this.Text = "捕捉测试";1956 this.groupBox1.ResumeLayout(false);1957 this.ResumeLayout(false);1958 this.PerformLayout();1959 1960 }1961 #endregion1962 1963 }1964 }