1. 程式人生 > >C# 實現真正的WebCamera【原創】

C# 實現真正的WebCamera【原創】

近期,做了個小軟體,需要在Web頁面呼叫本地攝像頭,花了4個小時實現了(9個月沒寫程式了有點生疏了 ),現分享給大家,希望有人能夠用的到。 
   在網上也搜尋過好多的資料,基本上都是在WinForm實現的攝像頭呼叫,在頁面中呼叫的基本沒看見過。
   思路:在頁面中呼叫ActiveX控制元件,實現WebCamera(你懂的)。
       
   下面具體步驟,寫的有點太詳細(有
點過分了,不要噴我)。

      一、製作 
ActiveX 控制元件

第一步,用VS2010建立一個專案,Windows窗體控制元件庫,並命名為WebCamera
      圖片 
       更改“專案屬性-應用程式-程式集資訊”設定,勾選“使程式集 COM 可見”:
   圖片


       更改“專案屬性-生成”設定,勾選“為 COM Interop 註冊”(注意,此處如果實在debug狀態下修改的,那在調到release狀態下還需要再設定一次):
     圖片
   
   第二步,
修改AssemblyInfo.cs檔案,新增[assembly: AllowPartiallyTrustedCallers()]項(需要引用System.Security名稱空間): 
   圖片
    
  第三步,新增使用者控制元件Camera,並設計介面,放上一個panel用來顯示攝像頭畫面。
圖片第四步,為了讓ActiveX控制元件獲得客戶端的信任,控制元件類還需要實現一個名為“IObjectSafety”的介面。先建立該介面(注意,不能修改該介面的GUID值): 

圖片

 
   第四步,為控制元件類新增GUID,這個編號將用於B/S系統的客戶端呼叫時使用(可以使用 工具-建立GUID 選單建立一個GUID): 
   圖片
第五步,在控制元件類中繼承並實現該介面: 
   圖片 

第六步,新增視訊控制類PCCamera.cs (該類主要功能是負責控制攝像頭)。  

圖片
      這樣,視訊ActiveX控制元件就開發完成了。 
   第七步,
使用Visual Studio 2010的安裝專案進行部署。這與普通的Windows Form應用程式的部署幾乎一樣,只有一個地方需要注意,將前面建立的使用者控制元件專案作為主輸出專案,並設定其Register屬性為vsdrpCOM,如下圖所示:
 
   圖片
   圖片
   
   將專案生成,在路徑下找到Release目錄,下面有兩個檔案,這就是下面我們將要使用的控制元件。
   圖片 
   二、頁面中呼叫控制元件,實現 WebCamera
    第一步,
將我們做的視訊控制元件進行安裝。      
       第二步,
在頁面中新增object標籤對,呼叫我們的視訊控制元件,即實現了我們想要的WebCamera。
       圖片


      果:攝像頭不好,把我照那麼難看 回頭就換電腦....
      
圖片

相關推薦

C# 實現真正WebCamera原創

近期,做了個小軟體,需要在Web頁面呼叫本地攝像頭,花了4個小時實現了(9個月沒寫程式了有點生疏了 ),現分享給大家,希望有人能夠用的到。     在網上也搜尋過好多的資料,基本上都是在WinForm實現的攝像頭呼叫,在頁面中呼叫的基本沒看見過。    思路:在頁面中呼叫A

原創開源Math.NET基礎數學類庫使用(13)C#實現其他隨機數生成器

1 public abstract class RandomSource : System.Random 2 { 3 readonly bool _threadSafe; 4 readonly object _lock = new objec

Linux c括號作用域原創筆記

地址 fine turn print key tdi def macro stdio.h 大師指點後,所做的筆記,很感謝一起願意研究技術的同事,以下不是本人原創,是他分析的成果#include <stdio.h> #include <time.h&g

原創smarty引擎下的導航按鈕高亮實現

array temp 是不是 emp AC php aar ann rom <?php$_nvaarr = array( array(‘name‘=>‘首頁‘,‘url‘=>‘company.php?id=‘), array(‘name‘=&g

原創自己動手實現牛逼的單例模式

pre adr 關鍵字 LV trace ack 也會 code exceptio 引言 其實寫這篇文章之前,我猶豫了一下,畢竟單例大家都知道,寫這麽一篇文章會不會讓人覺得老掉牙。後來想想,就當一種記錄吧。先來一副漫畫吧,如下圖所示 ok,我們回顧下小灰的遭遇,上述漫畫所

原創自己動手循序漸進實現觀察者模式

接口 定義 。。 推導 ole com package exce ++ 引言 自上一篇《自己動手實現牛逼的單例模式》問世之後,得到了不錯的評價。於是博主在五一放棄出去遊玩機會,趕制了這篇《自己動手循序漸進實現觀察者模式》,依然還是一步一步推導出最終版的觀察者模式。 觀察者模

原創阿裏雲RDS數據庫超大表分區實現

cpu bind 實現 表分區 HR 表數 alt bold inf [背景] 一張數據量約1億條數據的表,由於最初設計疏忽,未做分區,現需要根據創建時間字段來做分區; 業務要求,該表僅需要保留3個月的數據,數據量在9千萬~1億3千萬左右; 業務允許短時間停機,10分鐘左

原創C# API 未能創建 SSL/TLS 安全通道 問題解決

分享圖片 proto 執行 manager ima com 添加 poi ssl 在調用執行API之前添加以下代碼就行了 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls1

原創自己手寫實現Boost序列化簡易版

設計思路   在與多個系統進行網路互動時,序列化是不可缺少的技術。編寫一個C++語言的序列化實現,是練習運用模板超程式設計的絕佳案例,理解C++模板是如何"面向編譯期程式設計"的(業內好像沒有這個說法)。序列化物件處理基礎資料型別和類型別,boost的序列化功能劃分得更細緻,基本支援了C++語言

原創利用“程序注入”實現無檔案不死webshell

引子   上週末,一個好兄弟找我說一個很重要的目標shell丟了,這個shell之前是通過一個S2程式碼執行的漏洞拿到的,現在漏洞還在,不過web目錄全部不可寫,問我有沒有辦法搞個webshell繼續做內網。正好我之前一直有個通過“程序注入”來實現記憶體webshell的想法,於是就趁這個機會以Java為例做

原創C#的定時器使用詳解

定時器是程式開發中必不可少的一員,無論是微控制器/ARM,還是上位機,理清不同的定時器之間的差異可以避免進坑~ 那麼我們就來分析分析C#中常見的三種定時器: Windows.Form.Timer 首先我們使用這個系統定時器,間隔設定為200ms。 Th

原創《矩陣的史詩級玩法》連載十一:逆矩陣的程式碼實現及其在45度地圖中的應用

從搜尋引擎過來這篇文章的朋友可能會有點失望,因為我沒在標題上說明是多少階矩陣的程式碼。不得不說,固定階數,並且還只是3階的求逆實在是太簡單了,上篇說初中生都能看懂。而任意高階數則需要藉助諸如克拉默法則一類的定理進行實現,並且可能還得嘗試用高斯消元法進行優化。然而這些我都沒去做

原創《矩陣的史詩級玩法》連載十三:基向量座標變換矩陣的程式碼實現

本篇我們把上篇最後提到的矩陣實現出來並替換之前45度地圖演示檔案的矩陣上。 var baseX = new Point(0.87, 0.5); //ex基向量 var baseY = new Point(-0.32, 0.94); //ey基向量 var matri

原創《矩陣的史詩級玩法》連載十九:用基向量矩陣實現二次貝塞爾曲線到標準拋物線的轉換

在講解磚塊鋪貼的時候,我們先用基礎的旋轉縮放等變換組合出了45度地圖鋪貼的變換矩陣。然後發現針對性太強,換成別的角度就很不好算了。接著改成了用基向量進行推導的方法。 然後到二元二次方程,雖然我們可以通過旋轉的方法消滅掉xy項從而判斷出方程對應的曲線型別,但過程過於繁瑣,

C++ 實現MyString類課程設計

功能實現: <基本功能>  1> 實現標頭檔案的封裝:MyString.h 2> 預設建構函式對字串的初始化( MyString() )  3> 使用建構函式初始化字串的另外兩種方式 * 2( 動態指標+拷貝建構函式

原創redis庫存操作,分散式鎖的四種實現方式[連載一]--基於zookeeper實現分散式鎖

一、背景 在電商系統中,庫存的概念一定是有的,例如配一些商品的庫存,做商品秒殺活動等,而由於庫存操作頻繁且要求原子性操作,所以絕大多數電商系統都用Redis來實現庫存的加減,最近公司專案做架構升級,以微服務的形式做分散式部署,對庫存的操作也單獨封裝為一個微服務,這樣在高併發情況下,加減庫存時,就會出現超賣等

原創redis庫存操作,分布式鎖的四種實現方式[連載一]--基於zookeeper實現分布式鎖

zookeepe operation iat 並發 method logger 方案 nag 概念 一、背景 在電商系統中,庫存的概念一定是有的,例如配一些商品的庫存,做商品秒殺活動等,而由於庫存操作頻繁且要求原子性操作,所以絕大多數電商系統都用Redis來實現庫存的加減,

原創redis庫存操作,分散式鎖的四種實現方式[連載二]--基於Redisson實現分散式鎖

一、redisson介紹 redisson實現了分散式和可擴充套件的java資料結構,支援的資料結構有:List, Set, Map, Queue, SortedSet, ConcureentMap, Lock, AtomicLong, CountDownLatch。並且是執行緒安全的,底層使用N

原創經驗分享(15)spark sql limit實現原理

之前討論過hive中limit的實現,詳見 https://www.cnblogs.com/barneywill/p/10109217.html下面看spark sql中limit的實現,首先看執行計劃: spark-sql> explain select * from test1 limit

原創大資料基礎之Spark(5)Shuffle實現原理及程式碼解析

一 簡介 Shuffle,簡而言之,就是對資料進行重新分割槽,其中會涉及大量的網路io和磁碟io,為什麼需要shuffle,以詞頻統計reduceByKey過程為例, serverA:partition1: (hello, 1), (word, 1)serverB:partition2: (hell