From 67d38ab32829e9a15493b2d9b00f88014c20900b Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Mon, 24 Feb 2020 16:36:48 +0800 Subject: [PATCH] =?UTF-8?q?1.=E7=A7=BB=E9=99=A4=E5=9C=A8=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=97=B6=E5=AD=98=E5=9C=A8=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E7=9A=84Aforge=E7=9B=B8=E5=85=B3=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=92=8C=E4=BB=A3=E7=A0=81=202.=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0opencvsharp4=E7=BB=84=E4=BB=B6=E5=92=8C?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Former-commit-id: 0b05f92e72ac7b6c75800ca0d7b585ad14fc8a59 --- labs/CameraCard/AutoUpdate/.gitignore | 18 ++++ .../AutoUpdate/Properties/AssemblyInfo.cs | 6 +- .../AutoUpdate/UpdateForm.Designer.cs | 9 +- labs/CameraCard/AutoUpdate/UpdateForm.cs | 3 +- .../AutoUpdate/bin/Debug/AutoUpdate.exe | Bin 13312 -> 13312 bytes .../AutoUpdate/bin/Debug/AutoUpdate.pdb | Bin 40448 -> 40448 bytes .../AutoUpdate/bin/Release/AutoUpdate.exe | Bin 10752 -> 12800 bytes .../AutoUpdate/bin/Release/AutoUpdate.pdb | Bin 34304 -> 40448 bytes .../AutoUpdate.csproj.GenerateResource.cache | Bin 1017 -> 1017 bytes .../AutoUpdate/obj/Debug/AutoUpdate.exe | Bin 13312 -> 13312 bytes .../AutoUpdate/obj/Debug/AutoUpdate.pdb | Bin 40448 -> 40448 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 819 -> 1119 bytes .../AutoUpdate.csproj.FileListAbsolute.txt | 1 + .../AutoUpdate.csproj.GenerateResource.cache | Bin 1017 -> 1017 bytes .../AutoUpdate/obj/Release/AutoUpdate.exe | Bin 10752 -> 12800 bytes .../AutoUpdate/obj/Release/AutoUpdate.pdb | Bin 34304 -> 40448 bytes labs/CameraCard/CameraCard/CameraCard.csproj | 7 +- .../Infrastructure/AForgeCameraHelper.cs | 71 -------------- .../Infrastructure/OpenCvSharpCameraHelper.cs | 87 ++++++++++++++++++ labs/CameraCard/CameraCard/MainForm.cs | 15 +-- 20 files changed, 129 insertions(+), 88 deletions(-) create mode 100644 labs/CameraCard/AutoUpdate/.gitignore delete mode 100644 labs/CameraCard/CameraCard/Infrastructure/AForgeCameraHelper.cs create mode 100644 labs/CameraCard/CameraCard/Infrastructure/OpenCvSharpCameraHelper.cs diff --git a/labs/CameraCard/AutoUpdate/.gitignore b/labs/CameraCard/AutoUpdate/.gitignore new file mode 100644 index 00000000..cd5894bd --- /dev/null +++ b/labs/CameraCard/AutoUpdate/.gitignore @@ -0,0 +1,18 @@ +*.bak +*.suo +*.db +*.db-shm +*.db-wal +*.user +.vs +obj +Obj +bin +Bin +debug +Debug +release +Release +Logs +logs +node_modules \ No newline at end of file diff --git a/labs/CameraCard/AutoUpdate/Properties/AssemblyInfo.cs b/labs/CameraCard/AutoUpdate/Properties/AssemblyInfo.cs index 9a5106b9..fbe7aa73 100644 --- a/labs/CameraCard/AutoUpdate/Properties/AssemblyInfo.cs +++ b/labs/CameraCard/AutoUpdate/Properties/AssemblyInfo.cs @@ -22,7 +22,7 @@ using System.Runtime.InteropServices; // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID [assembly: Guid("0f767d6d-72de-47fd-be40-432dadfa1fae")] -// 程序集的版本信息由下列四个值组成: +// 程序集的版本信息由下列四个值组成: // // 主版本 // 次版本 @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.0.0.1")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/labs/CameraCard/AutoUpdate/UpdateForm.Designer.cs b/labs/CameraCard/AutoUpdate/UpdateForm.Designer.cs index ecc98ee9..09040da3 100644 --- a/labs/CameraCard/AutoUpdate/UpdateForm.Designer.cs +++ b/labs/CameraCard/AutoUpdate/UpdateForm.Designer.cs @@ -39,15 +39,16 @@ | System.Windows.Forms.AnchorStyles.Right))); this.log.Location = new System.Drawing.Point(12, 12); this.log.Name = "log"; - this.log.Size = new System.Drawing.Size(504, 184); + this.log.Size = new System.Drawing.Size(597, 370); this.log.TabIndex = 0; this.log.Text = ""; // // button2 // - this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.button2.Enabled = false; - this.button2.Location = new System.Drawing.Point(199, 213); + this.button2.Location = new System.Drawing.Point(267, 399); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(88, 30); this.button2.TabIndex = 2; @@ -58,7 +59,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(531, 255); + this.ClientSize = new System.Drawing.Size(624, 441); this.Controls.Add(this.button2); this.Controls.Add(this.log); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; diff --git a/labs/CameraCard/AutoUpdate/UpdateForm.cs b/labs/CameraCard/AutoUpdate/UpdateForm.cs index e8ffb886..123b5f9c 100644 --- a/labs/CameraCard/AutoUpdate/UpdateForm.cs +++ b/labs/CameraCard/AutoUpdate/UpdateForm.cs @@ -2,6 +2,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Reflection; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -19,7 +20,7 @@ namespace AutoUpdate { InitializeComponent(); this.StartPosition = FormStartPosition.CenterParent; - this.Text = "升级程序2"; + this.Text += $" v{Assembly.GetExecutingAssembly().GetName().Version.ToString()}"; this._file = file; this._fileName = Path.GetFileNameWithoutExtension(file); this._path = Path.GetDirectoryName(file); diff --git a/labs/CameraCard/AutoUpdate/bin/Debug/AutoUpdate.exe b/labs/CameraCard/AutoUpdate/bin/Debug/AutoUpdate.exe index 7759f3af0cc6b2a80f5ab082e98e2e7598d39207..6b163b706bcb931ce7aef5096f1e06dee81541d1 100644 GIT binary patch delta 4957 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 delta 4804 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 diff --git a/labs/CameraCard/AutoUpdate/bin/Debug/AutoUpdate.pdb b/labs/CameraCard/AutoUpdate/bin/Debug/AutoUpdate.pdb index 818e779284577bd3b4cbfd9d78405f4cfcb3b1e6..25268179771a0a6624ee71723f3433f2ec5e8454 100644 GIT binary patch delta 4348 zcmds)dsJ0b8o>9yT#yT1R)liBTuhV@P!tf*Ai;QOXrdsJCb|S42#8)a?VTLQa&#g` z*iDb=g-O#mPL^J$G_h=Q)F!LZ>EWz$t#O&lnpU=)(U!Axa(>_8*tllO)!%dA-rwHe zYwz>zy}xs=)$OvnT`!kMB(*)$cvr%fSC6)RnbTNt-&;!###A>P^o+e>X2j4_ox3*0 zY%6|TcSM#aZGQgL3-Nb6+EBl5(wEbdmmT{u_QLe8=OUvwMcfv>Y5#x&Vz)i2JnF|8 z#+OGXRXrTMFtEGdJ0APvzVB)!7S-!fjS>L;nYZj*wof;h71;y4Em&GnN{K^**_gfX zhc-`C z?nA9YPzQeknWkC|8{rx#8|bHSiNiaf3_ws@j*s1MhikFxfa~C|;LqSLN52O?L|<~- z2KU1CtkVM@&@c!-gO8Bp^Y97!|AaEoB`6b!A{8u{<%J@Tg-_F$s`Cttb0|3%eZc7t zg3qE)hMiFA{6<&`pG%@4&mD1)GAV(kz)i3kcA0JY@9TWCsvyw%0y0GE*U$?$!x;D* zcny>oec^BE$HN!lAh;C{hcCf=D0XaP^)me;xDAel+u=AEg4Iy$W;kq;ExiLpGlJhi z)?B>;NwICX9==Lnw)##;Ce>?XlgX+#=wqw)LTuEVP?q8M@Q+XiIt2I8e;57%ehT-) z6OR5A{aVX38CnlHzKSVzm zegsn?=g`W9Vt*t2n0`?oM<7okQH+O2&9KoQdse%9&QO#&GbJwe6O2(Q?trSO)G?D? zC{L2{g{>ZWuF7fKY7Q4Rw60>C$%ES7s~jBbP5Qa;2+V`0;7E8Dj)LLD;Jz?HBRu7PEgb*qC0OK&|7S$gY5SZ>}e8m0@(g`ygs zYE@$bvB_vqsOw=QOfmP5@#O_0dhVqFiCo;8R7v}i$%=o^1H~atC-y}>3UwCQYPK5i_8;~YV*!IfhRb@uG}UR z3p?=}U>bUY*nvAt`s6@f5vNCz@O_@Ya6BJ%JRfsBA2)YT-ohJDO65X*#I#pd=dHa; zl-*90ZYRnfC(7%_UlqtZauv_Rj^`1_^Usdw2d1fNw=OX$Q|{Ci=IJT7(AHxE#$BDJ zD?-DnQ+xH7`k~dh;Ic*8vnK}Y=Sg1TReG$j+$^2p(}&Eu83DiiF3>7#WR_f1hXj>k z+jN;dXyv{AJ1sTiT1UIXoS6~lm$&Kfv{aIKN1JH+*ZTa4_L4Y}sV|qcmZ?B1NBlcq z4)P$!_q@5kHd&uH8*6>K#q6TpVvg1NdUr>O{b>7_O-RqYq(hfx`Ca}Vu`@{hf5K#$ z?7C!sR`eBv%=wSD3$4#P;);}Xnf5xLt6y)kxGtWz+1}E8uP)xz)+4!C*IT!RJoU9< zF69k1%v-NLmtSS>GD{l@LZccU)V%GUY4n8$30o#D-Vx6%2+ZYI!UmFulY@^RD zb=<_R>|-i#byKkGQA)wyD$4K%PK3vH4w}P_0lnG&J|W-ou6?>O!8OeWC$+dKz@eVi z6bS!@^O|q!n|$G!q%~Sv9QtkOOU%3IE0FdzhtbOc>@de`;-tu{vu0p(fD=^6_gZrs z-$%@f=Ak+a!^o}iCz3c9lgrm)mg%Tf4 MbAMmTf4L>>-?t&jng9R* delta 4326 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 K4`zO^BJe*l;q1i# delta 4707 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 delta 4889 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 diff --git a/labs/CameraCard/AutoUpdate/obj/Debug/AutoUpdate.csproj.GenerateResource.cache b/labs/CameraCard/AutoUpdate/obj/Debug/AutoUpdate.csproj.GenerateResource.cache index 70554484b3b4b42d3f461860a04fd06124dae501..2417cdf32d71f9201011dc207ac54bf619d4ea6c 100644 GIT binary patch delta 17 Zcmey#{*!&fL1xyJo!lz!laDbQ0{}w(2Alu@ delta 17 Zcmey#{*!&fL1xyirS5V9laDbQ0{}!L2B-i4 diff --git a/labs/CameraCard/AutoUpdate/obj/Debug/AutoUpdate.exe b/labs/CameraCard/AutoUpdate/obj/Debug/AutoUpdate.exe index 7759f3af0cc6b2a80f5ab082e98e2e7598d39207..6b163b706bcb931ce7aef5096f1e06dee81541d1 100644 GIT binary patch delta 4957 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 delta 4804 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 diff --git a/labs/CameraCard/AutoUpdate/obj/Debug/AutoUpdate.pdb b/labs/CameraCard/AutoUpdate/obj/Debug/AutoUpdate.pdb index 818e779284577bd3b4cbfd9d78405f4cfcb3b1e6..25268179771a0a6624ee71723f3433f2ec5e8454 100644 GIT binary patch delta 4348 zcmds)dsJ0b8o>9yT#yT1R)liBTuhV@P!tf*Ai;QOXrdsJCb|S42#8)a?VTLQa&#g` z*iDb=g-O#mPL^J$G_h=Q)F!LZ>EWz$t#O&lnpU=)(U!Axa(>_8*tllO)!%dA-rwHe zYwz>zy}xs=)$OvnT`!kMB(*)$cvr%fSC6)RnbTNt-&;!###A>P^o+e>X2j4_ox3*0 zY%6|TcSM#aZGQgL3-Nb6+EBl5(wEbdmmT{u_QLe8=OUvwMcfv>Y5#x&Vz)i2JnF|8 z#+OGXRXrTMFtEGdJ0APvzVB)!7S-!fjS>L;nYZj*wof;h71;y4Em&GnN{K^**_gfX zhc-`C z?nA9YPzQeknWkC|8{rx#8|bHSiNiaf3_ws@j*s1MhikFxfa~C|;LqSLN52O?L|<~- z2KU1CtkVM@&@c!-gO8Bp^Y97!|AaEoB`6b!A{8u{<%J@Tg-_F$s`Cttb0|3%eZc7t zg3qE)hMiFA{6<&`pG%@4&mD1)GAV(kz)i3kcA0JY@9TWCsvyw%0y0GE*U$?$!x;D* zcny>oec^BE$HN!lAh;C{hcCf=D0XaP^)me;xDAel+u=AEg4Iy$W;kq;ExiLpGlJhi z)?B>;NwICX9==Lnw)##;Ce>?XlgX+#=wqw)LTuEVP?q8M@Q+XiIt2I8e;57%ehT-) z6OR5A{aVX38CnlHzKSVzm zegsn?=g`W9Vt*t2n0`?oM<7okQH+O2&9KoQdse%9&QO#&GbJwe6O2(Q?trSO)G?D? zC{L2{g{>ZWuF7fKY7Q4Rw60>C$%ES7s~jBbP5Qa;2+V`0;7E8Dj)LLD;Jz?HBRu7PEgb*qC0OK&|7S$gY5SZ>}e8m0@(g`ygs zYE@$bvB_vqsOw=QOfmP5@#O_0dhVqFiCo;8R7v}i$%=o^1H~atC-y}>3UwCQYPK5i_8;~YV*!IfhRb@uG}UR z3p?=}U>bUY*nvAt`s6@f5vNCz@O_@Ya6BJ%JRfsBA2)YT-ohJDO65X*#I#pd=dHa; zl-*90ZYRnfC(7%_UlqtZauv_Rj^`1_^Usdw2d1fNw=OX$Q|{Ci=IJT7(AHxE#$BDJ zD?-DnQ+xH7`k~dh;Ic*8vnK}Y=Sg1TReG$j+$^2p(}&Eu83DiiF3>7#WR_f1hXj>k z+jN;dXyv{AJ1sTiT1UIXoS6~lm$&Kfv{aIKN1JH+*ZTa4_L4Y}sV|qcmZ?B1NBlcq z4)P$!_q@5kHd&uH8*6>K#q6TpVvg1NdUr>O{b>7_O-RqYq(hfx`Ca}Vu`@{hf5K#$ z?7C!sR`eBv%=wSD3$4#P;);}Xnf5xLt6y)kxGtWz+1}E8uP)xz)+4!C*IT!RJoU9< zF69k1%v-NLmtSS>GD{l@LZccU)V%GUY4n8$30o#D-Vx6%2+ZYI!UmFulY@^RD zb=<_R>|-i#byKkGQA)wyD$4K%PK3vH4w}P_0lnG&J|W-ou6?>O!8OeWC$+dKz@eVi z6bS!@^O|q!n|$G!q%~Sv9QtkOOU%3IE0FdzhtbOc>@de`;-tu{vu0p(fD=^6_gZrs z-$%@f=Ak+a!^o}iCz3c9lgrm)mg%Tf4 MbAMmTf4L>>-?t&jng9R* delta 4326 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 delta 160 zcmcc5v6*dyKO+|t0|Nsm3y@%*9LeYi=CZK^xha$RnS#X~lao`6i!+llb23XR^-^+j z*f^kaQSvUS#hK}OAVC2(pdi>FP9TGm3rMhXPEKSlvf>6ZxynrR4D^f*j14Ur7(sF% aMGU>MGw*M@#=!_uz{SPJ1EP@>asvQ$V;nXB diff --git a/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.csproj.FileListAbsolute.txt b/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.csproj.FileListAbsolute.txt index e99fd644..5c13947e 100644 --- a/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.csproj.FileListAbsolute.txt +++ b/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.csproj.FileListAbsolute.txt @@ -10,3 +10,4 @@ D:\1.0\ZHXY\labs\CameraCard\AutoUpdate\obj\Release\AutoUpdate.csproj.GenerateRes D:\1.0\ZHXY\labs\CameraCard\AutoUpdate\obj\Release\AutoUpdate.csproj.CopyComplete D:\1.0\ZHXY\labs\CameraCard\AutoUpdate\obj\Release\AutoUpdate.exe D:\1.0\ZHXY\labs\CameraCard\AutoUpdate\obj\Release\AutoUpdate.pdb +D:\1.0\ZHXY\labs\CameraCard\AutoUpdate\obj\Release\AutoUpdate.csprojAssemblyReference.cache diff --git a/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.csproj.GenerateResource.cache b/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.csproj.GenerateResource.cache index 63458561c74c50f08c6ced27709a82f31d8d9601..95b1dae9fc890ad358a9605b57b8737a9943ed90 100644 GIT binary patch delta 24 gcmey#{*!$}D-$Ej<~Am4M%JyR?s5W?k1-nq0BqX_=Kufz delta 24 gcmey#{*!$}D-$Er<~Am4M%Fpf|CBf;A7eHK0B!pSB>(^b diff --git a/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.exe b/labs/CameraCard/AutoUpdate/obj/Release/AutoUpdate.exe index 7cbb9996628c60097183c4f3fbf01d0bff6c4c76..c92545d027574f9681de8ac53a76663e706adea8 100644 GIT binary patch literal 12800 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 K4`zO^BJe*l;q1i# delta 4707 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 delta 4889 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 diff --git a/labs/CameraCard/CameraCard/CameraCard.csproj b/labs/CameraCard/CameraCard/CameraCard.csproj index de8bf062..0c0f2cab 100644 --- a/labs/CameraCard/CameraCard/CameraCard.csproj +++ b/labs/CameraCard/CameraCard/CameraCard.csproj @@ -57,6 +57,7 @@ prompt MinimumRecommendedRules.ruleset true + true @@ -77,12 +78,12 @@ - + Form @@ -119,8 +120,8 @@ - - 2.2.5 + + 4.2.0.20200208 diff --git a/labs/CameraCard/CameraCard/Infrastructure/AForgeCameraHelper.cs b/labs/CameraCard/CameraCard/Infrastructure/AForgeCameraHelper.cs deleted file mode 100644 index 0620161a..00000000 --- a/labs/CameraCard/CameraCard/Infrastructure/AForgeCameraHelper.cs +++ /dev/null @@ -1,71 +0,0 @@ -using AForge.Video; -using AForge.Video.DirectShow; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -public class AForgeCameraHelper : IDisposable, ICameraHelper -{ - private CancellationTokenSource _cts = new CancellationTokenSource(); - private List _cameras = new List(); - private VideoCaptureDevice _videoSource; - private List _infos; - public Action> OnCameraChange { get; set; } - public Action OnFrame { get; set; } - - public void Start() - { - Task.Run(async () => - { - while (!this._cts.IsCancellationRequested) - { - this.ScanCameras(); - await Task.Delay(2000); - } - }); - } - - private void ScanCameras() - { - this._infos = new FilterInfoCollection(FilterCategory.VideoInputDevice).Cast().ToList(); - var cameras = this._infos.Select(o => o.Name).ToList(); - if (!this._cameras.SequenceEqual(cameras)) - { - this._cameras = cameras; - this.OnCameraChange?.Invoke(this._cameras); - } - } - - public void SwitchCamera(int index) - { - this.Stop(); - if (this._infos.Count > 0 && index < this._infos.Count) - { - var device = this._infos[index].MonikerString; - this._videoSource = new VideoCaptureDevice(device); - this._videoSource.VideoResolution = this._videoSource.VideoCapabilities.LastOrDefault(); - this._videoSource.NewFrame += new NewFrameEventHandler((s, e) => - { - this.OnFrame?.Invoke(e.Frame.Clone() as Bitmap); - }); - this._videoSource.Start(); - } - } - - private void Stop() - { - if (this._videoSource != null && this._videoSource.IsRunning) - { - this._videoSource.Stop(); - } - } - - public void Dispose() - { - this._cts.Cancel(); - this.Stop(); - } -} \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/Infrastructure/OpenCvSharpCameraHelper.cs b/labs/CameraCard/CameraCard/Infrastructure/OpenCvSharpCameraHelper.cs new file mode 100644 index 00000000..3e06d0c7 --- /dev/null +++ b/labs/CameraCard/CameraCard/Infrastructure/OpenCvSharpCameraHelper.cs @@ -0,0 +1,87 @@ +using DirectShowLib; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using OpenCvSharp; +using OpenCvSharp.Extensions; +public class OpenCvSharpCameraHelper : IDisposable, ICameraHelper +{ + private CancellationTokenSource _cts = new CancellationTokenSource(); + private List _cameras = new List(); + private VideoCapture _videoCapture; + + public Action> OnCameraChange { get; set; } + public Action OnFrame { get; set; } + + public void Start() + { + Task.Run(async () => + { + while (!this._cts.IsCancellationRequested) + { + this.ScanCameras(); + await Task.Delay(2000); + } + }); + } + + private void ScanCameras() + { + var devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); + var cameras = devices.Select(o => o.Name).ToList(); + foreach (var item in devices) + { + item.Dispose(); + } + if (!this._cameras.SequenceEqual(cameras)) + { + this._cameras = cameras; + this.OnCameraChange?.Invoke(this._cameras); + } + } + + public void SwitchCamera(int index) + { + this.Stop(); + this._videoCapture = new VideoCapture(index); + if (this._videoCapture.IsOpened()) + { + Task.Run(() => + { + while (this._videoCapture.IsOpened()) + { + try + { + using (var mat = new Mat()) + { + this._videoCapture.Read(mat); + this.OnFrame?.Invoke(mat.ToBitmap()); + } + } + catch + { + break; + } + } + Stop(); + }); + } + } + + private void Stop() + { + if (this._videoCapture != null && _videoCapture.IsOpened()) + { + this._videoCapture.Release(); + } + } + + public void Dispose() + { + this._cts.Cancel(); + this.Stop(); + } +} \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/MainForm.cs b/labs/CameraCard/CameraCard/MainForm.cs index 93a20dff..d7e36a25 100644 --- a/labs/CameraCard/CameraCard/MainForm.cs +++ b/labs/CameraCard/CameraCard/MainForm.cs @@ -11,7 +11,7 @@ namespace CameraCard { public partial class MainForm : Form { - private ICameraHelper _cameraHelper = new AForgeCameraHelper(); + private ICameraHelper _cameraHelper = new OpenCvSharpCameraHelper(); private CVRHelper _cvrHelper = new CVRHelper(); @@ -108,13 +108,16 @@ namespace CameraCard private void shotBtn_Click(object sender, EventArgs e) { - using (var bitmap = (this.cameraRender.Image.Clone() as Image)) + lock (this.cameraRender.Image) { - using (var bitmap2 = bitmap.ClipImage(this.cameraRender.Width, this.cameraRender.Height, this._rectWidth, this._rectHeight)) + using (var bitmap = (this.cameraRender.Image.Clone() as Image)) { - this.photo.Image?.Dispose(); - this.photo.Image = bitmap2.ResizeImage(this._photoWidth, this._photoHeight); - var base64Value = $"data:image/jpeg;base64,{this.photo.Image.ToBase64()}"; + using (var bitmap2 = bitmap.ClipImage(this.cameraRender.Width, this.cameraRender.Height, this._rectWidth, this._rectHeight)) + { + this.photo.Image?.Dispose(); + this.photo.Image = bitmap2.ResizeImage(this._photoWidth, this._photoHeight); + var base64Value = $"data:image/jpeg;base64,{this.photo.Image.ToBase64()}"; + } } } }