PDA

View Full Version : سوال: ذخیره سازی ویدیوی گرفته شده با وب کم



h_Dalily
پنج شنبه 18 تیر 1394, 01:47 صبح
سلام دوستان.دوستان من یکم مقدار توی زبان برنامه نویسی C#‎‎‎‎‎‎‎ مبتدیم اگه امکانش هست یاری کنید
من تو پروژه ای که دارم یک رباته که باید یک سری کار با اپراتور انجام بشه.الان رسیدم به دوربینش (من C#‎‎‎‎‎‎‎ رو انتخاب کردم چون قبلا یکم کار کرده بودم وگرنا خیلی دانشی ازش ندارم)
الان این قسمت دوربینش شامل 3 بخشه :1- دیدن فیلم گرفته شده توسط دوربین 2- ذخیره ی اون 3- پردازش تصویر یک نور لیزر
با یک سری تحقیق فهمیدم باید از کتاب خونه Aforge که مخصوص C#‎‎‎‎‎‎‎ هست استفاده کنم
با هزار بدبختی (واقعا تو این زمینه ها منابع ایرانی ضعیفن)تونستم تصویر رو بیارم(دوستان خواستین استفاده کنین چون واقعا فارسی منبع نداریم اگرم بودم خودم تا اینجاش راهنماییتون میکنم)
در ضمن من الان دم دستم دوربین نداشتم با دوربین تبلت با نرم افزار ip-webcam کار میکنم(فک نکنم مهم باشه خیلی)
اها راستی برنامم هم از 2 فرم:1-فرم در خواست یوزر پسورد 2-فرم اصلی برنامه (که الان مشکل اصلی من همیناس فک کنم)
133054

بعد با همچنین کدی میره فرم 2
this.Visible = false;
frmhome f2 = new frmhome();
f2.Activate();
f2.Show();
133055
کد این فرم هم به صورت زیر هستش :
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.IO;
using System.Threading;
using System.Drawing.Imaging;
using AForge.Video;
using AForge.Video.DirectShow;
using AForge.Video.FFMPEG;
using AForge.Video.VFW;
namespace prj_V0._0._0._1
{

public partial class frmhome : Form
{
private FilterInfoCollection videodevices;
private VideoCaptureDevice videosource;
VideoFileWriter writer;
// private VideoFileWriter writer;
private Bitmap image;
public frmhome()
{
InitializeComponent();
}


private void frmhome_Load(object sender, EventArgs e)
{
videodevices = new FilterInfoCollection(FilterCategory.VideoInputDevi ce);
foreach (FilterInfo device in videodevices) {

comboBox1.Items.Add(device.Name);
}
comboBox1.SelectedIndex = 0;
videosource = new VideoCaptureDevice();
}


private void button1_Click(object sender, EventArgs e)
{
if (videosource.IsRunning)
{
videosource.Stop();
pictureBox1.Image = null;
pictureBox1.Invalidate();
button1.Text = "Start";
}
else {
videosource = new VideoCaptureDevice(videodevices[comboBox1.SelectedIndex].MonikerString);
videosource.NewFrame += new NewFrameEventHandler(videosource_NewFrame);
videosource.Start();
button1.Text = "Stop";
}
}


void videosource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// if (btnrec.Text == "Record")
// {
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = image;
// }
/* if(btnrec.Text == "Stop Record")
{
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = image;
VideoFileWriter filewriter = new VideoFileWriter();
filewriter.WriteVideoFrame(image);

}*/
}



private void frmhome_FormClosed(object sender, FormClosedEventArgs e)
{
if (videosource.IsRunning)
{
videosource.Stop();
// filewriter.Close();

}


}


private void btnclose_Click(object sender, EventArgs e)
{




Application.Exit();


}


private void btnrec_Click(object sender, EventArgs e)
{


writer = new VideoFileWriter();
// create new AVI file and open it
writer.Open("C://code-bude_test_video.mp4", 640, 480, 25, VideoCodec.MPEG4, 10000);
// create frame image
// Bitmap image = new Bitmap(320, 240);


for (int i = 0; i < 240; i++)
{
// update image
image.SetPixel(i, i, Color.Red);
// add the image as a new frame of video file
writer.WriteVideoFrame(image);
}
writer.Close();

}


}
}






این همش کار نیکنه به جز دکمه ی btnrec که برای ذخیره سازی هستش
من میخوام یه فایل با پسوند .avi یا .mp4 بگیرم
بعد این ارور رو میگیرم که اصلا نمیفهمم چیه ولی مثل اینکه به فرم اول بستگی داره
133056

دوستان هرکی چیزی به ذهنش میرسه یه کمکی بده من الان 2 3 روزه توش موندم.مرسی کلی

aloneman2005
شنبه 10 مرداد 1394, 11:52 صبح
اگر داری از 64 بیتی استفاده میکنی dll های 64 بیتی بزار و build 64 بیتی انتخاب کن اگر نه 32 بیتی رو انتخاب کن