Контрольные вопросы
Министерство образования и науки РФ
Северо-Кавказский Горно-металлургический
институт
(Государственный Технологический Университет)
Факультет: Информационных технологий
Кафедра: Автоматизированной обработки информации
Отчет по лабораторной работе №2
Выполнила:: Студентка группы ИВб 11-2
Глотова А. В.
Проверила: Кокоева Диана Шалваевна
Владикавказ 2014 г.
СОДЕРЖАНИЕ
Процесс работы программы.. 4
Контрольные вопросы.. 7
Приложение. 8
Задание: Создать программу, позволяющую выполнять аффинные преобразования над загруженным изображением.
Процесс работы программы
Программа написана на языке С#.
Для создания утилиты использованы :
1. Компонент Picturebox1 и Picturebox2 для загрузки изображения и показа результата преобразований.
2. Компоненты Button, по нажатию на которые будут осуществляться заданные действия, т. е. повороты изображения на заданные углы и отзеркаливание.
3. Компоненты OpenFileDialog1 и SaveFileDialog1 для организации открытия и сохранения изображения.
При запуске программы открывается форма, содержащая набор кнопок. Нажатие на «Открыть» вызывает метод Button1Click, в котором прописаны методы компонента OpenFileDialog1 по загрузке выбранного пользователем изображения из его личных папок. В качестве результата возвращается путь и имя указанной картинки. Нажатием на кнопку «Копировать» производим копирование исходного изображения в Picturebox2 (рис.1):
Рис.1. Копирование
При нажатии на «зеркало» мы увидит отраженное зеркально по вертикали изображение (рис.2):
Рис. 2. Зеркальное отображение
Далее все примеры приводятся сразу с поворотом исходного изображения на заданный угол и его зеркальным вариантом:
Рис. 3. Поворот на 90 градусов и его зеркальное отображение
Рис. 4. Поворот на 180 градусов и его зеркальное отображение
Рис. 5. Поворот на 270 градусов и его зеркальное отображение
Контрольные вопросы
1) Какой класс представляет изображения в виде матрицы точек?
Bitmap.
2) Каким образом можно скопировать изображение из Picturebox1 в Picturebox2?
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Width, Mas.Height);
for (int i = 0; i < Mas.Width - 1; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(i, j, Mas.GetPixel(i, j));
}
pictureBox2.Image = im;
3) Координаты какого из свойств необходимо изменить для поворота картинки?
Для изменения поворота изображения следует менять координаты свойств SetPixel и GetPixel.
4) Каков формат свойства SetPixel?
SetPixel(номер строки, номер столбца, цвет) – указывает, в какую позицию установить данный цвет.
5) Каков формат свойства GetPixel?
GetPixel( носер строки, номер столбца) – указывает, откуда брать цвет.
Приложение
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;
namespace aokg2
{
public partial class Form1 : Form
{
Image image;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openPhotoDialog;
openPhotoDialog = new OpenFileDialog();
openPhotoDialog.Filter = "*.jpg;*.gif;*.bmp;|*.jpg;*.gif;*.bmp";
if (openPhotoDialog.ShowDialog() == DialogResult.OK)
{
image = Image.FromFile(openPhotoDialog.FileName);
pictureBox1.Image = image;
}
}
//сохранить
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog savePthotoDialog;
savePthotoDialog = new SaveFileDialog();
savePthotoDialog.Filter = "*.jpg;*.gif;*.bmp;|*.jpg;*.gif;*.bmp";
image = pictureBox1.Image;
if (savePthotoDialog.ShowDialog() == DialogResult.OK)
{
image.Save(savePthotoDialog.FileName + ".bmp");
}
}
// копировать
private void button3_Click(object sender, EventArgs e)
{
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Width, Mas.Height);
for (int i = 0; i < Mas.Width - 1; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(i, j, Mas.GetPixel(i, j));
}
pictureBox2.Image = im;
}
private void button10_Click(object sender, EventArgs e)
{
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Height, Mas.Width);
for (int i = 0; i < Mas.Width; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(j, i, Mas.GetPixel(i, j));
}
pictureBox2.Image = im;
}
private void button8_Click(object sender, EventArgs e)
{
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Height, Mas.Width);
for (int i = 0; i < Mas.Width; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(Mas.Height - j - 1, Mas.Width - i - 1, Mas.GetPixel(i, j));
}
pictureBox2.Image = im;
}
private void button9_Click(object sender, EventArgs e)
{
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Width, Mas.Height);
for (int i = 0; i < Mas.Width; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(i, j, Mas.GetPixel(Mas.Width - i - 1, Mas.Height - j - 1));
}
pictureBox1.Image = im;
}
private void button6_Click(object sender, EventArgs e)
{
Bitmap mas = new Bitmap(image);
Bitmap im = new Bitmap(mas.Height, mas.Width);
for (int i = 0; i < im.Height; i++)
{
for (int j = 0; j < im.Width; j++)
{
im.SetPixel(j, im.Height - i - 1, mas.GetPixel(i, j));
}
}
pictureBox1.Image = im;
}
private void button5_Click(object sender, EventArgs e)
{
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Width, Mas.Height);
for (int i = 0; i < Mas.Width; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(i, j, Mas.GetPixel(Mas.Width - i - 1, Mas.Height - j - 1));
}
pictureBox2.Image = mirror(im);
}
//зеркало
private Bitmap mirror(Bitmap img)
{
img = new Bitmap(pictureBox1.Image);
Bitmap im = new Bitmap(img.Width, img.Height);
int k = img.Width - 1;
for (int i = 0; i < im.Height; i++)
{
for (int j = 0; j < im.Width; j++)
{
im.SetPixel(k, i, img.GetPixel(j, i));
k--;
}
k = img.Width - 1;
}
return im;
}
private void button7_Click(object sender, EventArgs e)
{
pictureBox2.Image = mirror((Bitmap)pictureBox1.Image);
}
private void button4_Click(object sender, EventArgs e)
{
Bitmap Mas = new Bitmap(image);
Bitmap im = new Bitmap(Mas.Height, Mas.Width);
for (int i = 0; i < Mas.Width; i++)
for (int j = 0; j < Mas.Height; j++)
{
im.SetPixel(Mas.Height-j-1, i, Mas.GetPixel(i, j));
}
pictureBox1.Image = im;
}
}
}