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.


 

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

80319. Капітал і виробничі фонди підприємства 319 KB
  Загальна характеристика капіталу та виробничих фондів. Класифікація структура облік та оцінка основних фондів підприємства. Амортизація основних фондів. Загальна характеристика капіталу та виробничих фондів Слово капітал має німецьке походження і означає вартість яка внаслідок використання найманої робочої сили дає додану вартість .
80320. Нематеріальні ресурси та активи підприємства 95 KB
  Якщо йдеться про нематеріальні активи рідкісні за своєю природою, то вони утворюються не в результаті вкладення коштів, а завдяки привласненню рідкісності (наприклад, права на користування природними ресурсами). Але і в цьому разі доступ до обмежених дефіцитних ресурсів також захищено відповідними правами.
80321. Персонал підприємства та продуктивність праці 487 KB
  Продуктивність праці показники та методи її вимірювання. Слід відрізняти трудові ресурси реальні ті люди які вже працюють та потенційні ті що можуть бути залучені до конкретної праці. На рівні окремого підприємства для характеристики усієї сукупності працівників частіше застосовують терміни персонал кадри трудовий колектив.
80322. РАХУНКИ БУХГАЛТЕРСЬКОГО ОБЛІКУ І ПОДВІЙНИЙ ЗАПИС 242.5 KB
  Систематизація і групування господарських операцій на рахунках забезпечує безперервну інформацію про їх здійснення і результати діяльності необхідну для оперативного керівництва контролю й аналізу. Залежно від характеру облікованих обєктів записи на рахунках можуть здійснюватися у різних вимірниках натуральних трудових але з обовязковим використанням грошового вимірника з метою узагальнення різнорідних засобів і процесів. Збільшення і зменшення господарських засобів та їхніх джерел в результаті господарських операцій відображається на...
80323. КЛАСИФІКАЦІЯ І ПЛАН РАХУНКІВ БУХГАЛТЕРСЬКОГО ОБЛІКУ 190.5 KB
  Різнобічні завдання господарського керівництва та контролю потребують своєчасної і всебічної інформації про склад засобів підприємства і джерел їх формування, господарські процеси і фінансові результати діяльності.
80324. ПРИНЦИПИ ОБЛІКУ ОСНОВНИХ ГОСПОДАРСЬКИХ ПРОЦЕСІВ 138 KB
  Кількісними показниками діяльності підприємства є показники обсягу тих або інших процесів, наприклад кількість заготовлених (придбаних) виробничих запасів (сировини, матеріалів, палива тощо), виробленої та реалізованої готової продукції в цілому та за окремими її видами тощо. Цей показник дає змогу
80325. ДОКУМЕНТАЦІЯ ТА ІНВЕНТАРИЗАЦІЯ 97.96 KB
  Технологічно бухгалтерський облік як процес розпочинається з виявлення, вимірювання і реєстрації фактів, дій і подій з метою отримання інформації про господарські операції. Суцільне і безперервне спостереження за всіма господарськими операціями на підприємстві здійснюється за допомогою документування.
80326. ТЕХНІКА І ФОРМИ БУХГАЛТЕРСЬКОГО ОБЛІКУ 166.24 KB
  Облікові регістри — це носії спеціального формату (паперові, мащинні) у вигляді відомостей, журналів, книг, журналів-ордерів тощо, призначені для хронологічного, систематичного або комбінованого накопичення, групування та узагальнення інформації з первинних документів, що прийняті до обліку.
80327. БУХГАЛТЕРСЬКА (ФІНАНСОВА) ЗВІТНІСТЬ 178.03 KB
  Поняття та принципи побудови звітності Бухгалтерський облік як відомо це процес виявлення вимірювання реєстрації накопичення узагальнення зберігання та передачі інформації про діяльність підприємства користувачам для прийняття рішень. Підсумкове узагальнення інформації та одержання підсумкових показників що характеризують діяльність підприємства здійснюється шляхом складання звітності за звітний період. Баланс підприємства складається станом на кінець останнього дня кварталу або року. Перший звітний період новоствореного...