имм. пробник 1. Системное проектирование
Скачать 0.86 Mb.
|
ВВЕДЕНИЕ В настоящее время домашний компьютер или ноутбук сложно представить без веб-камеры, ведь это не только средство развлечения, которое широко распространено среди молодежи, использующей устройство в социальных сетях. Веб-камера может также использоваться как охранное устройство, которое известит вас о проникновении злоумышленника, к примеру, в ваш гараж; веб-камера может использоваться для проведения важных совещаний крупной компании, филиалы которой расположены в различных странах. Цель работы - создать программу, которая позволяет использовать камеру на самом простейшем уровне: сохранение фото. 1. Системное проектирование Для разработки программы использовался язык высокого уровня программирования С#. Для работы программы требуется PC совместимый компьютер и установленный .NET Framework версии 2.0 или выше и, конечно же, веб-камера с установленными драйверами последней версии. При использовании иного сочетания характеристик системы, на которой будет использоваться программа, возможны некоторые расхождения с результатами работы. 1.1 Разработка спецификаций функций Для решения поставленных задач необходимо разработать следующие методы: · private void start() o Метод, запускающее выбранное видеоустройство; · private void pause() o Метод, приостанавливающий запущенное видеоустройство; · private void stop() o Метод, останавливающий запущенное видеоустройство, высвобождение занятых ресурсов; · private void ApplyFilter(IFilter filter) o Метод, применяемый выбранный фильтр на изображение; · private void paramCam() o Метод, вызывающий параметры выбранной веб-камеры; · private void checked_changer() o Метод, который снимает «галочки» со всех фильтров/текстур в меню. Так как разрабатываемая программа состоит из подпрограмм, то реализация вышеописанных методов на языке С# представлена в Приложении. 2. ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ 2.1 Разработка меню Главное меню программы имеет следующую структуру: Рис. 1 Структура главного меню программы 2.2 Результаты тестирования приложения, используемые тесты Протестировать функционирование всего приложения по пунктам меню (Рис. 1). Рис. 2 Главное окно программы Для выбора пути сохраняемых фотографий используется еще одна форма (Form2), которая имеет вид, отображенный на рисунке 3. Рис. 3 Окно выбора пути сохранения фотографий Для демонстрации, применим к исходному изображению фильтр «Негатив» (Рис. 4) и текстуру «Облака» (Рис. 5). Рис. 4 Наложение фильтра «Негатив» Рис. 5 Наложение текстуры «Облака» Для вызова параметров выбранного устройства используется кнопка «Параметры камеры» (Рис. 6). Рис. 6 Окно «Параметры камеры» 3. ОПИСАНИЕ ПРИЛОЖЕНИЯ, ИНСТРУКЦИЯ ПО ЕГО ИСПОЛЬЗОВАНИЮ Программа предназначена для работы с веб-камерой на простейшем уровне. Подробное описание работы с программой приведено в п.2.2. Для нормального функционирования необходимы установленные библиотеки .NET Framework версии 2.0 или выше, веб-камера с установленными драйверами последней версии. При запуске программы камера сразу же запускается и начинает отображать полученное изображение в главном окне программы. Используемое по умолчанию устройство - первое устройство в списке всех установленных. Из списка, по желанию, можно выбрать другое устройство, изображение которого пользователь желает наблюдать. Для того, чтобы сохранять фотографии необходимо сперва выбрать путь сохранения из главного меню программы (см. Рис. 3). После закрытия диалогового окна, в текстовой строке отображается выбранный пользователем путь. Если пользователь изъявит желание изменить путь, то он сможет спокойно сделать это в ходе работы с программой. Для сохранения текущей фотографии (без применения фильтра/текстуры) пользователь должен нажать кнопку «Фото», после чего программа сохранит текущий кадр по выбранному заранее пути. Причем имя фотографии будет уникальным, что не позволит «затирать» старые фотографии. Минус лишь в том, что пользователь не должен удалять файлы из выбранного каталога, иначе «затирание» неизбежно, так как сохранение фотографий и придание файлу фотографии уникального имени основывается на подсчете количества файлов в выбранной директории. Для наложения фильтра/текстуры на изображение пользователь сначала должен нажать на кнопку «Пауза», затем из главного меню выбрать необходимый фильтр/текстуру. Для сохранения изображения, на которое наложен фильтр/текстура также необходимо нажать кнопку «Фото». ЗАКЛЮЧЕНИЕ Мной разработана программа, позволяющая использовать веб-камеру в качестве фотоаппарата. При желании, можно дописать программу тем самым расширив функциональность. Программа позволяет: · Накладывать фильтры на изображение; · Накладывать текстуры на изображение; · Сохранять фотографии с камеры в файл; СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Лабор, В.В. Создание приложений для Windows: учеб. пособие /В.В. Лабор. - Минск: Харвест, 2003. - 383 с. . Троелсен, Э. C# и платформа .NET. Библиотека программиста: научн. лит-ра /Э. Троелсен. - СПб: Питер, 2004. - 796 с. ПРИЛОЖЕНИЕкамера изображение программирование текстура Листинг программы : Form1.cs (Главное окно программы): using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Drawing.Imaging;System.Text;System.Windows.Forms;System.Diagnostics;System.Configuration;System.IO;AForge.Video.DirectShow;AForge.Imaging;AForge.Imaging.Filters;AForge.Controls;AForge.Imaging.Textures;WindowsFormsApplication10 {partial class Form1 : Form {image_1;filtered_image;v_Devices;vcd;Form1() {();_Devices= new FilterInfoCollection(FilterCategory.VideoInputDevice);(v_Devices.Count == 0) {.Show("Устройств не обнаружено", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); }(int i = 1, n = v_Devices.Count; i <= n; i++) {cameraName = v_Devices[i - 1].Name;_box_for_devices.Items.Add(cameraName); }_box_for_devices.SelectedIndex = 0; }void start() {= new VideoCaptureDevice(v_Devices[0].MonikerString);.DesiredFrameRate = 25;.VideoSource = vcd;.Start();.Enabled = true;_changer(); }void pause() {.SignalToStop();_changer();_TSM.Enabled = true;_TMS.Checked = true; }void stop() {.SignalToStop();.WaitForStop();.Dispose();.Image = null;_TSM.Enabled = false;.Enabled = false; }void Form1_FormClosing(object sender, FormClosingEventArgs e) {(); }void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image) {.Image = image;_1 = (Bitmap)pictureBox1.Image; }void ApplyFilter(IFilter filter) {_changer();_image = filter.Apply(image_1);.Image = filtered_image; }void paramCam() {(vcd != null && vcd is VideoCaptureDevice) {.DisplayPropertyPage(this.Handle); } {.Show("Данное видеоустройство не имеет настроек", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } }void выходToolStripMenuItem_Click(object sender, EventArgs e) {.Close(); }void выбратьПутьToolStripMenuItem_Click(object sender, EventArgs e) {form2 = new Form2();.ShowDialog();.label1.Text = form2.photoPath_textBox.Text; }void button6_Click(object sender, EventArgs e) {_TSM.Enabled = false;_TMS.Checked = false;(); }void checked_changer() {_TMS.Checked = false;_bel_TSM.Checked = false;_TSM.Checked = false;_TSM.Checked = false;_TSM.Checked = false;_TSM.Checked = false;_TSM.Checked = false;_TSM.Checked = false;_TSM.Checked = false; }void параметрыКамерыToolStripMenuItem_Click(object sender, EventArgs e) {(); }void Form1_Load(object sender, EventArgs e) {(); }void pauseButton_Click(object sender, EventArgs e) {(); }void запуститьToolStripMenuItem_Click(object sender, EventArgs e) {(videoSourcePlayer1 == null) {(); }{ MessageBox.Show("Нельзя запустить камеру дважды. Это повлияет на работу системы в целом.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }void приостановитьToolStripMenuItem_Click(object sender, EventArgs e) {(); }void остановитьToolStripMenuItem_Click(object sender, EventArgs e) {(); }void ch_bel_TSM_Click(object sender, EventArgs e) {(Grayscale.CommonAlgorithms.BT709);_bel_TSM.Checked = true; }void sepia_TSM_Click(object sender, EventArgs e) {(new Sepia());_TSM.Checked = true; }void invert_TSM_Click(object sender, EventArgs e) {(new Invert());_TSM.Checked = true; }void none_TMS_Click(object sender, EventArgs e) {_changer();_TMS.Checked = true;.Image = image_1; }void лабиринтToolStripMenuItem_Click(object sender, EventArgs e) {(new Texturer(new LabyrinthTexture(), 1.0, 0.8));_TSM.Checked = true; }void textile_TSM_Click(object sender, EventArgs e) {(new Texturer(new TextileTexture(), 0.8, 0.2));_TSM.Checked = true; }void cloud_TSM_Click(object sender, EventArgs e) {(new Texturer(new CloudsTexture(), 1.0, 0.8));_TSM.Checked = true; }void marble_TSM_Click(object sender, EventArgs e) {(new Texturer(new MarbleTexture(), 1.0, 0.8));_TSM.Checked = true; }void wood_TSM_Click(object sender, EventArgs e) {(new Texturer(new WoodTexture(), 1.0, 0.8));_TSM.Checked = true; }void стартToolStripMenuItem_Click(object sender, EventArgs e) {(videoSourcePlayer1 == null) {(); }{ MessageBox.Show("Нельзя запустить камеру дважды. Это повлияет на работу системы в целом.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }void паузаToolStripMenuItem_Click(object sender, EventArgs e) {(); }void параметрыКамерыToolStripMenuItem1_Click(object sender, EventArgs e) {(); }void запуститьToolStripMenuItem1_Click(object sender, EventArgs e) {(videoSourcePlayer1 == null) {(); }{ MessageBox.Show("Нельзя запустить камеру дважды. Это повлияет на работу системы в целом.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }void приостановитьToolStripMenuItem1_Click(object sender, EventArgs e) {(); }void остановитьToolStripMenuItem1_Click(object sender, EventArgs e) {(); }void photoButton_Click(object sender, EventArgs e) {NumOfFiles = 0;(label1.Text != "") {[] path = Directory.GetFiles(label1.Text);+= path.Length; } {.Show("Путь не выбран. Выберите путь для сохранения фото", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); }NameOfPhoto = label1.Text + "\\Супер фото" + NumOfFiles + ".jpeg";.Image.Save(NameOfPhoto, ImageFormat.Jpeg); } } } Form2.cs (Окно выбора пути сохранения): using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;WindowsFormsApplication10 {partial class Form2 : Form {Form2() {();_textBox.Enabled = false; }void button1_Click(object sender, EventArgs e) {fbd = new FolderBrowserDialog();(fbd.ShowDialog() == DialogResult.OK) {_textBox.Text = fbd.SelectedPath; } }void button1_Click_1(object sender, EventArgs e) {noText = "";(photoPath_textBox.Text != noText) {.Close(); }if (photoPath_textBox.Text == noText) {.Show("Сначала выберите путь для сохранения ваших фото", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } }void button2_Click(object sender, EventArgs e) {.Close(); } } } |