5_laba
.pdf// Этот обработчик обновляет информацию на progressbar. private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
Для реализации поддержки отмены в обработчике события Click кнопки отмены добавьте код, отменяющий асинхронную операцию.
private void cancelAsyncButton_Click(System.Object sender, System.EventArgs e)
{
//отменяем выполнение операции. this.backgroundWorker1.CancelAsync();
//Деактивирует кнопку Отмена. cancelAsyncButton.Enabled = false;
}
Следующие фрагменты кода в методе ComputeFibonacci сообщают о ходе выполнения и поддерживают отмену.
if (worker.CancellationPending)
{
e.Cancel = true;
}
...
int percentComplete =
(int)((float)n / (float)numberToCompute * 100); if (percentComplete > highestPercentageReached)
{
highestPercentageReached = percentComplete; worker.ReportProgress(percentComplete);
}
Класс Bitmap
Для выполнения этой работы вам необхо димо подробнее познакомиться с классом Bit map.
Инкапсу лирует точечный рисунок GDI+, состоящий из данных пикселей графического изображения и атрибутов рисунка. Объект Bit map используется для работы с изображениями, определяемыми данными пикселей.
Основные свойства, определенные в этом классе:
|
Имя |
|
Описание |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Flags |
|
Получает флаги атрибутов для данных о пикселях это го |
||||||||
|
|
объекта Image. |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
FrameDimensionsList |
|
Получает |
|
массив |
идентификаторов |
GUID, |
||||
|
|
представляю щих размеры кадров в объекте Image. |
|||||||||
|
|
|
|
|
|||||||
|
Height |
|
Получает высоту объекта Image в пикселях. |
|
|||||||
|
|
|
|
||||||||
|
HorizontalResolution |
|
Получает горизонтальное разрешение объекта Image в |
||||||||
|
|
пикселях на дюйм. |
|
|
|
|
|
|
|||
|
Palette |
|
Возвращает или задает палитру |
цветов, используемую |
|||||||
|
|
для объекта Image. |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||
|
PhysicalDimension |
|
Получает ширину и высо ту данного изображения. |
||||||||
|
PixelFormat |
|
Получает формат пикселей объекта Image. |
|
|||||||
|
PropertyIdList |
|
Получает |
идентификаторы |
(ID) |
элементов |
свойс тв, |
||||
|
|
хранящихся в объекте Image. |
|
|
|
|
|||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||
|
PropertyItems |
|
Получает |
все |
элементы |
свойств |
(части метаданных), |
||||
|
|
хранящихся в объекте Image. |
|
|
|
|
|||||
|
|
|
|
|
|
|
|||||
|
RawFormat |
|
Получает формат файла объекта Image. |
|
|
||||||
|
Size |
|
Получает |
ширину |
и высоту данного изображения в |
||||||
|
|
пикселях. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tag |
|
Возвращает |
или |
задает |
объект, |
предоставляющий |
||||
|
|
дополнительные данные об изображении. |
|
||||||||
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
||||
|
VerticalResolution |
|
Получает |
вертикальное |
разрешение |
объекта |
Image в |
||||
|
|
пикселях на дюйм. |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||
|
Width |
|
Получает ширину объекта Image в пикселях. |
|
Основные мето ды, реализуемые в рамках э того класса:
Имя |
|
|
Описание |
|
|
|
Clone |
Создает точную копию данного объекта . |
|
||||
Dispose |
Освобождает |
все |
ресурсы, |
|
используемые |
|
изображением. |
|
|
|
|
||
|
|
|
|
|
||
|
|
|
|
|
|
|
Fro mHicon |
Создает |
изображение |
Bit map |
для |
значка из |
|
дескриптора Windows. |
|
|
|
|||
|
|
|
|
|||
Fro mResource |
Создает |
изображение Bit map из у казанного ресурса |
||||
Windows. |
|
|
|
|
|
|
|
|
|
|
|
|
|
GetBounds |
Получает границы изображения в заданных единицах |
|||||
измерения. |
|
|
|
|
||
|
|
|
|
|
||
|
|
|
|
|
||
|
Возвращает |
информацию |
о |
параметрах, |
||
GetEncoderParameterList |
поддерживаемых |
указанным |
кодировщиком |
|||
|
изображения. |
|
|
|
|
|
GetFrameCount |
Возвращает ко личество кадров указанного размера. |
|||||
GetHbit map |
Создает |
объект |
точечного рисунка GDI из данно го |
|
изображения. |
|
|
|
|
|
|
|
|
|
|||
GetHicon |
Возвращает дескриптор для значка. |
|
|
|||
|
|
|
||||
GetPixel |
Получает цвет указанной точки в э том изображении. |
|
||||
|
|
|
||||
GetPropertyItem |
Получает указанный э лемент свойств из объекта. |
|
||||
|
|
|
|
|||
GetThumbnailImage |
Возвращает эскиз для объекта . |
|
|
|||
|
|
|
|
|
||
MakeTransparent |
Делает заданный |
цвет |
прозрачным |
для данно го |
||
изображения. |
|
|
|
|
||
|
|
|
|
|
||
RemovePropertyItem |
Удаляет элемент указанного свойства из объекта . |
|
||||
RotateFlip |
Поворачивает, зеркально отражает, либо поворачивает |
|||||
и зеркально отражает объект. |
|
|
||||
|
|
|
||||
|
Со храняет объект Image в указанный файл. В |
|||||
Save |
параметрах может быть указан кодировщик, его |
|||||
|
определенные параметры. |
|
|
|
||
SaveAdd |
Добавляет |
кадр в |
файл |
или по ток, |
указанный |
в |
предыдущем вызове метода Save. |
|
|
||||
|
|
|
||||
SelectActiveFrame |
Выделяет кадр, заданный размером и индексом. |
|
||||
SetPixel |
Задает цвет указанно го пикселя в э том изображении. |
|
||||
SetPropertyItem |
Со храняет |
э лемент |
свойства (часть метаданных) |
в |
||
объекте. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
SetResolution |
Устанавливает разрешение для этого изображения. |
|
Так, для по лучения цвета пикселя можно использовать следующее: old_pixel_color = (this_image as Bitmap).GetPixel(x, y);
а для установки нового цвета пикселя (на основе смеси цветов старого): byte new_color = Convert.ToByte(0.5 * Convert.ToDouble(old_pixel_color.R) +
0.29 * Convert.ToDouble(old_pixel_color.G) +
0.21 * Convert.ToDouble(old_pixel_color.B));
Color new_pixel_color = Color.FromArgb(old_pixel_color.A, new_color, new_color, new_color);
(this_image as Bitmap).SetPixel(x, y, new_pixel_color);
Самостоятельно познакомьтесь с рабо той компонента PictureBo x.
Использование меню
В зависимости от задач, решаемых приложением, в нем могут содержаться следующие виды меню: MenuStrip (ранее MainMenu), ContextMenuStrip, ToolStrip, StatusStrip.
MenuStrip предоставляет систему меню для формы. ContextMenuStrip – контейнер контекстного меню.
ToolStrip - контейнер для объектов панели инструментов Windows . StatusStrip – представляет собой элемент «строка состояния» Самостоятельно разберитесь с этими элементами
Варианты индивидуальных заданий.
Вариант 1. Построение фракталов.
Создать приложение позволяющие строить три разные фрактала: множество Мандельброта (рис. 1), фрактал коробка(рис. 2), звезда Дарера (рис. 3). Кнопки построения фракталов разместить в главном меню приложения (MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Фракталы
oКоробка
o Дарер
o Мандельброта o Свойства
Рис 1. |
Рис 2. |
Рис 3. |
При нажатии на кнопку «Свойства» должно появляться модальное диалоговое окно с основными свойствами фракталов, такими как: число итерационных шагов, цвет и др., приняв во внимание, что каждый вид фрактала настраивается по своему. Каждый новый фрактал необходимо строить в MDI дочернем окне основной формы, количество возможных построенный фракталов должно быть неограниченно. Все расчеты фракталов должны выполнятся в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход построения фрактала. Построенные фракталы должны быть отображены в PictureBox, расположенном в той же дочерней форме. Предусмотреть возможность сохранения изображений - отображение меню с кнопкой «Сохранить» нажатием правой кнопки мыши по рисунку.
Вариант 2. Сжатие изображений.
Создать приложение позволяющие сжимать загруженные изображения двумя различными алгоритмами на выбор (выбрать из списка, по одному из двух имеющихся групп, объяснить
принцип работы(по коду) выбранных алгоритмов преподавателю!!!).
Список алгоритмов:
1.Алгоритмы сжатия без потерь
a.Алгоритм RLE
b.Алгоритм LZW
c.JBIG
d.Lossless JPEG
e.Кодирование с предсказаниями
f.Хоффмана
2.Алгоритмы сжатия с потерями
a.Алгоритм JPEG
b.Алгоритм JPEG-2000
c.Фрактальный алгоритм
d.Рекурсивный (волновой) алгоритм
e.Кодирование с предсказаниями
f.Вейвлет-кодирование
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Сжатие
o1 метод
o 2 метод o Свойства
При нажатии на кнопку «Свойства» должно появляться модальное диалоговое окно с основными настройками методов сжатия, также выбрать с помощью openFileDialog изображение для сжатия и папку (folderBrowserDialog) для сохранения результатов с форматом выходного изображения, приняв во внимание, что каждый вид сжатия имеет свои параметры. Все загруженные изображения поместить в MDI дочернем окне(каждое изображение в своем окне) основной формы, количество изображений должно быть неограниченно. Все расчеты должны выполнятся в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход сжатия.
Вариант 3. Фильтрация изображений.
Создать приложение позволяющие улучшать изображения методом фильтрации в частотной области используя двумерной ДПФ с двумя разными фильтрами : фильтр низких частот Баттерворта и гауссов фильтр низких частот (при желании указанные фильтры можно заменить на любые два своих).
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Сжатие
o1 фильтр
o 2 фильтр o Свойства
При нажатии на кнопку «Свойства» должно появляться модальное диалоговое окно с основными настройками методов сжатия, также выбрать с помощью openFileDialog изображение(я) для фильтрации и папку (folderBrowserDialog) для сохранения результатов с форматом выходного изображения, приняв во внимание, что каждый вид фильтрации имеет свои настраиваемые параметры. Все загруженные изображения поместить в MDI дочернем окне (каждое изображение в своем окне, изображения фильтров в одном окне с фильтруемым изображением) основной формы, количество изображений должно быть неограниченно. Все расчеты должны выполняться в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход сжатия.
Вариант 4. Работа с изображениями.
Создать приложение позволяющие обрабатывать изображения используя:
Просветление/Затемнение
Перевод в негатив
Пороговое преобразование(бинаризация)
Контраст
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Методы
o1 метод
o ………………
o N метод o Свойства
Все загруженные изображения поместить в MDI дочернем окне(разделить дочернюю форму на две области – загружаемое изображение и изменяемое изображение) основной формы, количество изображений должно быть неограниченно. Все настраиваемые параметры, включая выбор файла изображения, ползунки величин и др., должны быть размещены там же где и
изображения, в отдельном контейнере. Все расчеты должны выполняться в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход сжатия. Приложение должно корректно обрабатывать цветные
и черно белые изображения, все три канала.
Вариант 5. Работа с изображениями.
Создать приложение позволяющие обрабатывать изображения используя:
Цветовая (гамма преобразование) коррекция изображения(значения яркости пикселей изменяются по закону степенных функций).
Фильтр сглаживания
Фильтр «подчеркивания границ»
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Методы
o1 метод
o ………………
o N метод o Свойства
Все загруженные изображения поместить в MDI дочернем окне(разделить дочернюю форму на две области – загружаемое изображение и изменяемое изображение) основной формы, количество изображений должно быть неограниченно. Все настраиваемые параметры, включая выбор файла изображения, ползунки величин и др., должны быть размещены там же где и изображения, в отдельном контейнере. Все расчеты должны выполняться в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход сжатия. Приложение должно корректно обрабатывать цветные
и черно белые изображения, все три канала.
Вариант 6. Работа с изображениями.
Создать приложение позволяющие обрабатывать изображения используя:
Медианный фильтр.
Метод усиления края по Лапласу
Метод Усиление края методом сдвига и разности
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Методы
o1 метод
o ………………
o N метод o Свойства
Все загруженные изображения поместить в MDI дочернем окне(разделить дочернюю форму на две области – загружаемое изображение и изменяемое изображение) основной формы, количество изображений должно быть неограниченно. Все настраиваемые параметры, включая выбор файла изображения, ползунки величин и др., должны быть размещены там же где и изображения, в отдельном контейнере. Все расчеты должны выполняться в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход сжатия. Приложение должно корректно обрабатывать цветные
и черно белые изображения, все три канала.
Задание 7. Работа с изображениями.
Создать приложение позволяющие обрабатывать изображения используя:
Выделение края (границ) с оператором Робертса.
Выделение края (границ) с оператором Собеля.
Выделение края (границ) с оператором Превита
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Методы
o1 метод
o ………………
o N метод o Свойства
Все загруженные изображения поместить в MDI дочернем окне(разделить дочернюю форму на две области – загружаемое изображение и изменяемое изображение) основной формы, количество изображений должно быть неограниченно. Все настраиваемые параметры, включая выбор файла изображения, ползунки величин и др., должны быть размещены там же где и изображения, в отдельном контейнере. Все расчеты должны выполняться в отдельном потоке, для этого необходимо использовать BackgroundWorker. Внизу каждого дочернего окна необходимо использовать ProgressBar в котором показывается ход сжатия. Приложение должно корректно обрабатывать цветные
и черно белые изображения, все три канала.
Вариант 8. Работа с изображениями.
Создать приложение позволяющие обрабатывать изображения используя:
Масштабирование изображений с помощью метода ближайшего соседа.
Масштабирование изображений с помощью метода билинейной интерполяции.
Вращение – поворачивать изображение вокруг
произвольной точки на любой произвольный угол (точку вращения задавать на исходном изображении с помощью мыши)
Кнопки управления разместить в главном меню приложения(MenuStrip). Пример блоков меню:
Файл
oЗакрыть активное окно
oВыход
Методы
o1 метод