DIY - 智能小車:用 Microsoft Visual C++/CLI 編寫 Web Cam 程式碼 (四十):
AForge.NET 是計算機視覺和人工智能庫 (Library),筆者使用 Microsoft Visual C++/CLI 編寫Web Cam 程式碼,直接呼叫 AForge 的動態連結程式庫(DLL),創建 MJPEG Stream ,打開 Video Source 便可以取得影像。
Web Cam 程式 |
03_CLI_AForge_ipcam C++/CLI Form1.c 程式:
// Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using AForge.Video;
using AForge.Video.DirectShow;
namespace _02_AFroge_ipcam
{
public partial class Form1 : Form
{
private Stopwatch stopWatch = null;
// Class constructor
public Form1()
{
InitializeComponent();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs
e)
{
CloseCurrentVideoSource();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
// create video source
MJPEGStream mjpegSource = new
MJPEGStream("http://192.168.0.108:8080/?action=stream");
// open it
OpenVideoSource(mjpegSource);
}
// Open video source
private void OpenVideoSource( IVideoSource source )
{
// set busy cursor
this.Cursor = Cursors.WaitCursor;
// stop current video source
CloseCurrentVideoSource( );
// start new video source
videoSourcePlayer.VideoSource =
source;
videoSourcePlayer.Start( );
// reset stop watch
stopWatch = null;
// start timer
timer.Start( );
this.Cursor = Cursors.Default;
}
// Close video source if it is running
private void CloseCurrentVideoSource( )
{
if (
videoSourcePlayer.VideoSource != null )
{
videoSourcePlayer.SignalToStop( );
// wait ~ 3 seconds
for ( int i = 0; i <
30; i++ )
{
if (
!videoSourcePlayer.IsRunning )
break;
System.Threading.Thread.Sleep( 100 );
}
if ( videoSourcePlayer.IsRunning
)
{
videoSourcePlayer.Stop(
);
}
videoSourcePlayer.VideoSource
= null;
}
}
// New frame received by the player
private void videoSourcePlayer_NewFrame( object sender, ref Bitmap
image )
{
DateTime now = DateTime.Now;
Graphics g = Graphics.FromImage(
image );
// paint current time
SolidBrush brush = new
SolidBrush( Color.Red );
g.DrawString(
now.ToString( ), this.Font, brush, new PointF( 5, 5 ) );
brush.Dispose( );
g.Dispose( );
}
// On timer event - gather statistics
private void timer_Tick( object sender, EventArgs e )
{
IVideoSource videoSource =
videoSourcePlayer.VideoSource;
if ( videoSource != null )
{
// get number of frames since
the last timer tick
int framesReceived =
videoSource.FramesReceived;
if ( stopWatch == null )
{
stopWatch = new
Stopwatch( );
stopWatch.Start( );
}
else
{
stopWatch.Stop( );
float fps = 1000.0f * framesReceived /
stopWatch.ElapsedMilliseconds;
//fpsLabel.Text =
fps.ToString( "F2" ) + " fps";
stopWatch.Reset( );
stopWatch.Start( );
}
}
}
} // public partial class Form1 : Form
}
|
偵錯 → 開始偵錯(F5) |
顯示 Web Cam 的圖像! |
2013年6月17日 天氣報告
氣溫:27.9 度 @ 22:10
相對濕度:百分之94%
天氣:微雨
沒有留言:
張貼留言