51098

Увеличение и уменьшение цифровых изображений

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

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

Цель работы: написать программу способную производить увеличение/уменьшение исходного изображения в нецелое число раз методом билинейной интерполяции. Код программы...

Русский

2014-02-05

208.4 KB

5 чел.

Министерство Образования Республики Беларусь

Учреждение образования

«Брестский государственный технический университет»

Кафедра ЭВМ и С

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

«Увеличение и уменьшение цифровых изображений»

Выполнил:

студент 4-го курса

гр. Э-41, ФЭИС

Якубчик А.Н.

Проверил:

Кузьмицкий Н.Н.

Брест 2013

Цель работы:

- написать программу способную производить увеличение/уменьшение исходного изображения в нецелое число раз методом билинейной интерполяции.

Код программы:

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;

namespace mashtabirovanie

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           this.InitializeComponent();

           this.AutoScroll = true;

         

       }

          

       public byte[] ar;

       

       

       private void Zoom(double d, int chek)

       {

           this.AutoScroll = true;

           openFIleToolStripMenuItem.Enabled = false;

           zoomToolStripMenuItem.Enabled = false;

           Bitmap ZoomImg = new Bitmap((int)(pictureBox1.Image.Width * d),

               (int)(pictureBox1.Image.Height * d)); //полученный битмап

          

           Bitmap tmp = new Bitmap(pictureBox1.Image);

           if (chek==0)

           {

               progressBar1.Value = 0;

               progressBar1.Maximum = ZoomImg.Height + 1;

               for (int i = 0; i < ZoomImg.Height; i++)

               {

                   for (int j = 0; j < ZoomImg.Width; j++)

                   {

                       ZoomImg.SetPixel(j, i, tmp.GetPixel((int)(j / d), (int)(i / d)));

                   }

                   progressBar1.Value++;

                  // Application.DoEvents();

               }

           }

           else

           {

               double nX = (double)tmp.Width / (double)ZoomImg.Width;

               double nY = (double)tmp.Height / (double)ZoomImg.Height;

               double fraction_x, fraction_y, one_minus_x, one_minus_y;

               int ceil_x, ceil_y, floor_x, floor_y;

               Color c1 = new Color();

               Color c2 = new Color();

               Color c3 = new Color();

               Color c4 = new Color();

               byte red, green, blue;

               byte b1, b2;

               progressBar1.Value = 0;

               progressBar1.Maximum = ZoomImg.Width + 1;

               for (int x = 0; x < ZoomImg.Width; ++x)

               {

                   for (int y = 0; y < ZoomImg.Height; ++y)

                   {

                      

                       floor_x = (int)Math.Floor(x * nX); //получаем число меньшее или равное задоному

                       floor_y = (int)Math.Floor(y * nY);

                       ceil_x = floor_x + 1;

                       if (ceil_x >= tmp.Width) ceil_x = floor_x;

                       ceil_y = floor_y + 1;

                       if (ceil_y >= tmp.Height) ceil_y = floor_y;

                       fraction_x = x * nX - floor_x;

                       fraction_y = y * nY - floor_y;

                       one_minus_x = 1.0 - fraction_x;

                       one_minus_y = 1.0 - fraction_y;

                       c1 = tmp.GetPixel(floor_x, floor_y);

                       c2 = tmp.GetPixel(ceil_x, floor_y);

                       c3 = tmp.GetPixel(floor_x, ceil_y);

                       c4 = tmp.GetPixel(ceil_x, ceil_y);

                       // Blue

                       b1 = (byte)(one_minus_x * c1.B + fraction_x * c2.B);

                       b2 = (byte)(one_minus_x * c3.B + fraction_x * c4.B);

                       blue = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                       // Green

                       b1 = (byte)(one_minus_x * c1.G + fraction_x * c2.G);

                       b2 = (byte)(one_minus_x * c3.G + fraction_x * c4.G);

                       green = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                       // Red

                       b1 = (byte)(one_minus_x * c1.R + fraction_x * c2.R);

                       b2 = (byte)(one_minus_x * c3.R + fraction_x * c4.R);

                       red = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                       ZoomImg.SetPixel(x, y, System.Drawing.Color.FromArgb(255, red, green, blue));

                   }

                   progressBar1.Value++;

                   Application.DoEvents();

               }

           }

           pictureBox2.Width = ZoomImg.Width;

           pictureBox2.Height = ZoomImg.Height;

           pictureBox2.Image = ZoomImg;

           openFIleToolStripMenuItem.Enabled = true;

       }

      

       private void Form1_Load(object sender, EventArgs e)

       {

       }

       private void openFIleToolStripMenuItem_Click(object sender, EventArgs e)

       {

           OpenFileDialog open_dialog = new OpenFileDialog();

           if (open_dialog.ShowDialog() == DialogResult.OK)

           {

               Bitmap tek_bmp = (Bitmap)Image.FromFile(open_dialog.FileName);

               pictureBox1.Width = tek_bmp.Width;

               pictureBox1.Height = tek_bmp.Height;

               pictureBox1.Image = tek_bmp;

           }

           zoomToolStripMenuItem.Enabled = true;

       }

       private void zoomToolStripMenuItem_Click(object sender, EventArgs e)

       {

           Form_Zoom f = new Form_Zoom();

           if (f.ShowDialog() == DialogResult.OK)

               Zoom(Convert.ToSingle(f.info), f.biling);

       }

       private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

       {

       }

       private void toolStripProgressBar1_Click(object sender, EventArgs e)

       {

       }

   }

}

Пример тестирования:

Вывод: освоил приемы обработки графических изображений в формате BMP.


 

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

1062. Учет финансовой отчетности в процессе управления предприятием ООО Стиль 411 KB
  Финансовая отчетность и ее роль в информационном обеспечении управления предприятием. Методы анализа устойчивости финансового состояния в процессе управления предприятием. Составление и анализ финансовой отчетности в процессе управления предприятием (на материалах ООО Стиль). Анализ устойчивости финансового состояния по данным финансовой отчетности.
1063. Створення таблиць і форм мовою html 528 KB
  Створення форм і таблиць, вивчення синтаксису і тегів цих елементів, набуття навиків у використанні цих елементів при розробці власних сторінок.
1064. Теоретичні засади державного пенсійного страхування та перспективи його розвитку 569 KB
  Теоретичні засади дослідження системи пенсійного страхування в Україні. Особливості розвитку системи державного пенсійного страхування в країнах світу. Принципи загальнодержавного пенсійного страхування в Україні. Правова основа державного пенсійного страхування в Україні. Тенденції розвитку державного пенсійного страхування в Україні.
1065. Проектування індивідуального житлового будинку в м. Донецьк 441.5 KB
  Проектований двоповерховий житловий будинок має в плані не правильну конфігурацію. Будинок по конструктивній схемі відноситься до будинків з поперечним і повздовжнім розміщенням несучих стін і спиранням плит перекриття по двом сторонам. Зовнішні стіни в будинку виконані з легкої кладки товщиною 510 мм.
1066. Фотодатчики, их классификации, режимы работы и применение в биоинженерной технике 587 KB
  Основные понятия фотоэлектрических приборов. Основные характеристики фотоэлектрических преобразователей. Режимы работы датчиков. Области применения медико-биологической практике. Дополнительные возможности датчиков.
1067. Культура России второй половины ХІХ - первой половины ХХ столетия 550 KB
  Факторы развития культуры в России. Крестьянская реформа 19 февраля 1861 года. Мировой революционный процесс и передовая западноевропейская общественная мысль. Метод критического реализма. Мотив слияния с природой, погружения в ее тайны и красоту.
1068. База данных Кадры 323 KB
  База данных Кадры предназначается для учета личного состава, что необходимо на любом, даже на самом маленьком предприятии. База данных Кадры дает возможность облегчить работу отдела кадров и применять различные запросы для поиска необходимых сведений о сотрудниках.
1069. Бухгалтерский учет объектов основных средств. 411 KB
  Понятие и классификация основных средств. Организация системы бухгалтерского учета и анализ учетной политики. Методическое обеспечение бухгалтерского учета основных средств в ФГУП Росморпорт. Порядок проведения и учет результатов инвентаризацииосновных средств.
1070. Сетевое администрирование 411.5 KB
  Планирование сетевой инфраструктуры. Разработка механизма распространения политик безопасности на всю организацию. Выбор протоколов при планировании сетевой инфраструктуры. Планирование адресного пространства. Интеграция DNS зон и WINS. Защита сетей. Информационная безопасность.