frmVoice.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using CarMeterSystem.OptionCls;
  2. using Common;
  3. using MeterPlugInLibrary;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Drawing;
  9. using System.Drawing.Drawing2D;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Runtime.InteropServices;
  13. using System.Text;
  14. using System.Threading;
  15. using System.Threading.Tasks;
  16. using System.Windows.Forms;
  17. namespace CarMeterSystem
  18. {
  19. public partial class frmVoice : Form
  20. {
  21. public frmVoice()
  22. {
  23. InitializeComponent();
  24. }
  25. List<CamerEs> lc = new List<CamerEs>();
  26. private void LoadVoice(List<loginParam> lt)
  27. {
  28. int i = 1;
  29. foreach (loginParam lp in lt)
  30. {
  31. //最多载入4个摄像头,因为这边截图最多4摄像头带1屏幕图
  32. if (i > 4) break;
  33. CamerEs c = new CamerEs(lp);
  34. PictureBox pb = new PictureBox();
  35. pb.Name = $"pb{i++}";
  36. pb.Width = AppConfigCache.imgWidth;
  37. pb.Height = Convert.ToInt32(AppConfigCache.imgWidth / 1.8);
  38. //pb.BackColor = Color.Black;
  39. pb.Dock = DockStyle.Top;
  40. flowLayoutPanel1.Controls.Add(pb);
  41. c.Login(pb);
  42. lc.Add(c);
  43. }
  44. }
  45. public void LogOut()
  46. {
  47. foreach (CamerEs lp in lc)
  48. {
  49. lp.LoginOut();
  50. }
  51. }
  52. /// <summary>
  53. /// 传入了值,则按传入的路径及Ip进行截图,否则则全部截图
  54. /// </summary>
  55. /// <param name="imgUrl"></param>
  56. /// <param name="ip"></param>
  57. public void CapturePictrue(string actualFirstNo,Form fm, string imgUrl = default, string ip = default)
  58. {
  59. //*
  60. this.TopMost = true;
  61. Thread.Sleep(1000);
  62. //*
  63. int i = 1;
  64. foreach (Control cn in flowLayoutPanel1.Controls)
  65. {
  66. if (cn.Name.Contains("pb"))
  67. {
  68. //截屏的方式只截取第一个摄像头的图片
  69. if (i == 1)
  70. {
  71. PictureBox pb = (PictureBox)cn;
  72. Bitmap bit = new Bitmap(800, 450);//实例化一个和窗体一样大的bitmap
  73. Graphics g = Graphics.FromImage(bit);
  74. g.CompositingQuality = CompositingQuality.HighQuality;//质量设为最高 HighQuality
  75. g.CopyFromScreen(pb.Left, pb.Top, 0, 0, new Size(800, 450));//保存整个窗体为图片
  76. bit.Save($"{PbCache.path}/imgShort/formalImg/{PbCache.sportInfo.baseSpotNo}_C{actualFirstNo}_{i}.jpg");//默认保存格式为PNG,保存成jpg格式质量不是很好
  77. bit.Dispose();
  78. this.TopMost = false;
  79. fm.TopMost = true;
  80. }
  81. else
  82. {
  83. //_ = BeginInvoke(new Action(() => {
  84. // lc[i - 1].CapturePictrue($"{PbCache.path}/imgShort/formalImg/{PbCache.sportInfo.baseSpotNo}_C{actualFirstNo}_{i}.jpg");
  85. //}));
  86. lc[i - 1].CapturePictrue2($"{PbCache.path}/imgShort/formalImg/{PbCache.sportInfo.baseSpotNo}_C{actualFirstNo}_{i}.jpg");
  87. }
  88. if (i < flowLayoutPanel1.Controls.Count) i++;
  89. }
  90. }
  91. //*/
  92. }
  93. internal void LoadVoiceInfo()
  94. {
  95. List<MeterBaseVideoChild> lt = PbCache.videoChild;
  96. List<loginParam> lp = new List<loginParam>();
  97. foreach (MeterBaseVideoChild t in lt)
  98. {
  99. lp.Add(new loginParam { ip = t.p_ip, port = int.Parse(t.vdo_port), userId = t.vdo_user, pwd = t.vdo_pwd });
  100. }
  101. LoadVoice(lp);
  102. //this.Hide();
  103. }
  104. private void frmVoice_FormClosing(object sender, FormClosingEventArgs e)
  105. {
  106. try
  107. {
  108. LogOut();
  109. }
  110. catch { }
  111. }
  112. }
  113. }