31868

Редагування растрових зображень

Лабораторная работа

Информатика, кибернетика и программирование

У класі форми обявити обєкти доступні для різних методів PictureBox pictureBox1; Lbel lbel1; Point spotClicked; 6.Size = new Size640 480; Завантажити малюнок в елемент PictureBox і вставити у форму додати до проекту відповідну папку з малюнком або вказати адресу малюнка pictureBox1 = new PictureBox; pictureBox1.jpg ; pictureBox1.SizeMode = PictureBoxSizeMode.

Украинкский

2013-09-01

74.5 KB

3 чел.

Лабораторна робота 2. Редагування растрових зображень

Завдання 1. Створення додатку для редагування растрових зображень (затемнення та підсвічування у вибраній ділянці малюнка)  у режимі перегляду кода з реакцією на події користувача

 

Методи, що працюють з мишею

OnClick(EventArgs e)

Виконане клацання кнопкою миші.

OnDoubleClick(EventArgs e)

 Виконане подвійне клацання кнопкою миші.

OnMouseDown(MouseEventArgs e)

Натиснута ліва кнопка миші.

OnMouseHover(MouseEventArgs e)

Покажчик миші зупинений десь після переміщення.

OnMouseMove(MouseEventArgs e)

Покажчик миші переміщений.

OnMouseUp(MouseEventArgs e)

Відпущена ліва кнопка миші

 

Методи, що працюють з клавіатурою

OnKeyDown(KeyEventArgs e)

Клавіша натиснута.

OnKeyPress(KeyPressEventArgs e)

Клавіша натиснута і відпущена.

OnKeyUp(KeyEventArgs e)

Натиснута клавіша відпущена.

 

 

1. Створити новий проект Windows Forms ( власне ім'я + lab2+1).

2. Знищити файл Form1.cs

3. Відредагувати файл Program.cs

 

using System;

using System.Windows.Forms;

namespace назва проекту

{

public class MyForm : System.Windows.Forms.Form

{

public MyForm()

{

}

[STAThread]

static void Main()

{

Application.Run(new MyForm());

}

}

}

 

4.Забезпечити використання простору імен System.Drawing, що містить більшість класів, структур, перерахувань і делегатів, які забезпечують базову функціональність малювання.

 

using System.Drawing;

 

 

5. У  класі форми об'явити об'єкти, доступні для різних методів

 

  PictureBox pictureBox1;

  Label label1;

  Point spotClicked;

 

6. До конструктора форми додати:

Розміри вікна

   

    this.Size = new Size(640, 480);

   

Завантажити малюнок в елемент PictureBox і вставити у форму (додати до проекту відповідну папку з малюнком, або вказати адресу малюнка)

   

    pictureBox1 = new PictureBox();

    pictureBox1.Image = (Image)new Bitmap(@"../../images/Водяные лилии.jpg");

    pictureBox1.SizeMode = PictureBoxSizeMode.Normal;

    pictureBox1.Dock = DockStyle.Fill;

    this.Controls.Add(pictureBox1);

   

Додати мітку з інструкціями в нижню частину екрану

   

    label1 = new Label();

    label1.BackColor = Color.Wheat;

    label1.Dock = DockStyle.Bottom;

    label1.Text =

    "При натисненій лівій кнопці миші можна збільшити яскравість виділеного прямокутника" +

    "Натиснута права кнопка зменшує яскравість прямокутника ";

    label1.TextAlign = ContentAlignment.MiddleCenter;

    this.Controls.Add(label1);

   

Прив'язати PictureBox до обробників подій миші

   

    this.pictureBox1.MouseDown += new MouseEventHandler(MouseButtonIsDown);

    this.pictureBox1.MouseUp += new MouseEventHandler(MouseButtonIsUp);

 

7. До класу форми додати

 

Обробник події, що спрацьовує  при натисненні кнопки миші

 

public void MouseButtonIsDown(object sender, MouseEventArgs e)

{

  // Запам'ятовуємо точку, в якій відбулося натиснення кнопки миші.

  // Коли кнопка буде відпущена - запам'ятати її координати

 

  spotClicked.X = e.X;// горизонтальна координата

  spotClicked.Y = e.Y;// вертикальна координата

}

 

Обробник подій, що спрацьовує при ВІДЖИМАННІ кнопки миші

 

 

public void MouseButtonIsUp(object sender, MouseEventArgs e)

{

  // Користувач відпустив кнопку миші

 

  // Створюємо прямокутник , що обмежує

  // область зображення, з якою користувач працюватиме

 

  Rectangle r = new Rectangle();

 

  // Лівий верхній кут прямокутника відповідає точці

  // у якій була натиснута кнопка миші.

 

  r.X = spotClicked.X;

  r.Y = spotClicked.Y;

 

  // Ширина і висота прямокутника обчислюється

  // шляхом віднімання координат миші в точці натиснення

  // з поточних координат (у точці віджимання кнопки).

 

  r.Width = e.X – spotClicked.X;

  r.Height = e.Y – spotClicked.Y;

 

  if (e.Button == MouseButtons.Left)

  {

    /* Якщо була натиснута і відпущена ліва кнопка миші

    викликаємо метод, що підсвічує область зображення */

    ChangeLightnessL(r);

   

  else

  {

    // Якщо була натиснута права кнопка, викликаємо

    // метод, що затемнює  область зображення

   

    ChangeLightnessR(r);

  }

}

 

Додати метод, що збільшує яскравість вибраної ділянки зображення

шляхом збільшення яскравості кожного пікселя цієї ділянки

public void ChangeLightnessL(Rectangle rect)

{

  int newRed, newGreen, newBlue;

  Color pixel;

 

  // Копіюємо зображення, завантажене в PictureBox

 

  System.Drawing.Bitmap picture = new

  Bitmap(this.pictureBox1.Image);

 

  // Операція збільшення яскравості може зайняти багато часу

  // користувача попереджають, якщо вибрана велика ділянка.

 

  if ((rect.Width > 150) || (rect.Height > 150))

  {

   

    DialogResult result = MessageBox.Show(

    "Виділена область велика! " +

    "Зміна яскравості може вимагати значного часу!",

    "Warning", MessageBoxButtons.OKCancel);

   

    // При натисненні кнопки Cancel (Відміна) виходимо з методу

    // і повертаємося до місця його виклику

   

    if (result == DialogResult.Cancel) return;

  }

  /* Перебираємо послідовно всі пікселі даної ділянки

  і подвоюємо значення яскравості компонент RGB пікселів */

 

  // Перебір по горизонталі зліва направо...

 

  for (int x = rect.X; x < rect.X + rect.Width; x++)

  {

    // і по вертикалі зверху вниз...

   

    for (int у = rect.Y; у < (rect.Y + rect.Height); y++)

    {

      // Прочитуємо поточний піксель

     

      pixel = picture.GetPixel(x, у);

     

      // Збільшуємо яскравість колірних компонент пікселя

     

      newRed = (int)Math.Round(pixel.R * 2.0, 0);

      if (newRed > 255) newRed = 255;

      newGreen = (int)Math.Round(pixel.G * 2.0, 0);

      if (newGreen > 255) newGreen = 255;

      newBlue = (int)Math.Round(pixel.B * 2.0, 0);

      if (newBlue > 255) newBlue = 255;

     

      // Привласнюємо пікселю нові колірні значення

     

      picture.SetPixel

      (x, у, Color.FromArgb(

      (byte)newRed, (byte) newGreen, (byte) newBlue));

    }

  }

  // Поміщаємо змінену копію зображення в PictureBox

  // щоб зміни відобразилися на екрані

 

  this.pictureBox1.Image = picture;

  }

 

Метод, що зменшує яскравість вибраної ділянки зображення

шляхом зменшення яскравості кожного пікселя цієї ділянки ChangeLightnessR

написати самостійно

 

8. Відкомпілювати і запустити проект

 

Завдання 2. Виведення графічних зображень у режимі дизайну . Вивести власне зображення

 

1. Створити проект DisplayImage+ власне ім'я

2. Додати до класу Form1 поля

 

readonly Image piccy;

private readonly Point [] piccyBounds;

 

В конструкторі Form1 завантажити файл

 

public Form1()

{

InitializeComponent();

piccy = Image.FromFile(@"шлях до файлу");

AutoScrollMinSize = piccy.Size;

piccyBounds = new Point[3];

piccyBounds[0] = new Point(0,0); // верхній лівий

piccyBounds[1] = new Point(piccy.Width,0); // верхній правий

piccyBounds[2] = new Point(0,piccy.Height); // нижній лівий

}

 

 

Додати перевизначений метод OnPaint():

 

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

Graphics dc = e.Graphics;

dc.ScaleTransform(1.0f, 1.0f);

dc.TranslateTransform(AutoScrollPosition.X, AutoScrollPosition.Y);

dc.DrawImage(piccy, piccyBounds);

}

 

Внести зміни до згенерованого IDE коду метода Form1.

Dispose():

 

protected override void Dispose(bool disposing)

{

piccy.Dispose();

if( disposing && (component != null))

{

components.Dispose();

}

base.Dispose(disposing );

}

 

Завдання 3. Змінити виведення зображення (використовуючи відповідні координати) :

-зменшити пропорційно зображення

-зменшити у 2 рази по вертикалі (стиснути)

-зменшити у 2 рази по горизонталі (розтягти)

 

 

 


 

А также другие работы, которые могут Вас заинтересовать

30693. Анализ стихотворения Шепот, робкое дыханье 13.34 KB
  Любимая пора влюбленных ночь: Свет ночной ночные тени Стихотворение начинается с появления самих героев: Шепот робкоедыханье. И не случайно со слова шепот ведь ночью нельзя кричать тем более насвидании. Чувства героев развиваются от шепота и робкого дыханья к рядуволшебных изменений милого лица.
30694. «Отцы и дети» в одноименном романе И.С. Тургенева 14.14 KB
  Все эти новомодные веяния вызывают у Кирсанова возмущение и гнев. Все слова Кирсанова лишь слова так как не подкреплены никаким действием. Базарову человеку стремительному деятельному претит все из чего состоит Кирсанов.В финале романа мы узнаем что Кирсанов переехал в Германию и что сами немцы принимают его за англичанина.
30695. Типы носителей информации и их особенности 109.15 KB
  В современном обществе, где информация проблема носителей информации встала очень остро, так как объемы информации, генерируемые пользователями, возрастают в геометрической прогрессии.
30696. Мотив дороги в произведениях отечественной классики 19 века 25.31 KB
  Есенина Мотив дороги звучит в двух значительнейших произведениях 19 века. Образ дороги в этом произведении не выходит на первый план. Образ дороги здесь традиционный символ жизненного пути.
30697. Стихотворное новаторство В.В. Маяковского. Чтение наизусть и анализ стихотворения «А вы могли бы?» 12.76 KB
  Чтение наизусть и анализ стихотворения А вы могли бы. Тема этого стихотворения желание и способность лирического героя изменить в корне обыденную ни чем не примечательную жизнь причем сделать это так как никто другой и не подумал бы. Идея же заключается в названии стихотворения и в последних строках:А вы ноктюрн сыграть могли быНа флейте водосточных трубКаждая строка этого стихотворения вызов каждое слово экспрессивно и ярко; при своей лаконичности стихотворение оставляет более глубокое впечатление чем многие более длинные...
30698. Психологизм изображения внутреннего мира личности в лирике А.А.Ахматовой (на примере 3–4 стихотворений по выбору экзаменуемого). Земное и вечное в стихотворении «Приморский сонет» 15.95 KB
  Облик героини поэзии Ахматовой предстает в житейской простоте но в нем заключается пафос сильной личности. Ее лирическая героиня не отражает персональной судьбы Ахматовой а отражает проявление женской доли женского голоса. Предметный мир воспринимается уже в ином виде: три ступеньки кажутся вечностью любимый прием Ахматовой оксюморон темный дом свечи горевшие равнодушножелтым огнем. То в образе лирической героини проступают черты самой Ахматовой которая не верит что все происходит именно с ней насмешницей любимицей всех...
30699. Стихотворение А. Блока «Незнакомка» 12.25 KB
  Блока Незнакомка Тема страшного мира звучит в третьем томе стихотворений А. Это лишь внешняя видимая сторона страшного мира. При этом все зримые образы материального мира у Блока обретают символический подтекст. Повествование о ресторанной встрече превращается в рассказ о человеке угнетенном пошлостью окружающего мира его стремлении освободиться от этого.
30700. АНАЛИЗ 1 ГЛАВЫ 1 ЧАСТИ «МАСТЕРА И МАРГАРИТЫ» 20.62 KB
  Патриавшие пруды это центр Москвы давно пользующийся дурной славой Время года месяц: Весна май Время суток: Небывало жаркий закат странности возникающие в это время на Патриарших: одновременная икота литераторов; отсутствие в жаркое время отдыхающих под липами; появление прозрачного человека в клетчатом пиджаке; чувство необоснованного страха появившегося у Берлиоза...
30701. Анализ романа Замятина Мы 19.86 KB
  Солженицын1 История создания и смысл названия романа: Роман создавался вскоре после возвращения автора из Англии в революционную Россию в 1920 году по некоторым сведениям работа над текстом продолжалась и в 1921 году. Первая публикация романа состоялась за границей в 1924 году. В случае с названием романа Мы и с героем романа это утверждение особенно справедливо.