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.


 

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

48068. Конспект лекцій. Міжнародна інвестиційна діяльність 938.5 KB
  Міжнародна інвестиційна діяльність: конспект лекцій для студентів напряму Конспект лекцій з дисципліни Міжнародна інвестиційна діяльність призначено для студентів напряму Дисципліна є варіативною для студентів зазначеного фаху і передбачає вивчення сутності та ролі міжнародних інвестицій в сучасному міжнародному бізнесі набуття вмінь аналізу міжнародної інвестиційної діяльності в Україні.
48070. Математическая логикаи теория алгоритмов. Курс лекций 125.5 KB
  Формула логики высказываний: пропозициональные буквы переменные: B C простые высказывания пропозициональные связки логические связки скобки = пропозициональная формула ПФ формула proposition заявление утверждение; от лат. Формула F называется выполнимой если F истинна в некоторой интерпретации: существует k такое что FIk = И. Формула F называется общезначимой или тавтологией если F истинна во всех возможных интерпретациях: для всех возможных k: FIk = И. Формула F называется противоречием если F ложна во всех...
48071. Формальные теории математической логики 172 KB
  Формальные теории. Задано А альфа множество символов теории алфавит Т. Задано В Ф бета множество аксиом теории. Собственные нелогические аксиомы определяют специфику конкретной теории.
48072. Наукова комунікація як складова фахової діяльності. Українська термінологія у професійному спілкуванні 323 KB
  Особливості наукового тексту і професійного наукового викладу думки. Науковий стиль української мови має свої особливості. Загальні ознаки наукового стилю поняттєвість. Термін та його ознаки. термінологія як система...
48073. Матеріалознавство та технологія матеріалів 1.4 MB
  Кристалізація металів. Механічні властивості металів та методи їх визначення Мета: Ознайомити студентів з основними поняттями конструкційних матеріалів: будовою та властивостями металів роллю вітчизняних та зарубіжних вчених у розвитку матеріалознавства з основними механічними властивостями металів і сплавів та методами їх випробування. Кристалічна будова металів будова і властивості реальних кристалів. Плавлення металів.
48074. Народознавство 1.1 MB
  Релігія в житті українського народу. Звичаї та обряди українського народу. Ретромандрівка в глибину століть допоможе зрозуміти духовність і менталітет нашого народу віковічно творений як образне бачення українською людиною світу землі та життя на ній. Українське народознавство як навчальний предмет Відродження України неможливе без пробудження національної свідомості українського народу насамперед молоді.
48075. Электротехника 5.26 MB
  Определение связи между токами напряжениями параметрами заданной цепи и теми величинами которые определяют работу рассматриваемой установки например: к. Принцип работы и общие свойства важнейших электротехнических устройств и элементов электрической цепи. Задачи синтеза заключаются в разработке методов такого выбора схемы соединения элементов цепи и такого подбора параметров этих элементов чтобы полученная цепь обладала заданными характеристиками. По наличию данных элементов различают соответственно активные и пассивные цепи.
48076. НЕГЛАСНІ СЛІДЧІ (РОЗШУКОВІ) ДІЇ. КУРС ЛЕКЦІЙ 722 KB
  Підстави проведення негласних слідчих розшукових дій. Засоби що використовуються під час проведення негласних розшукових дій Лекція 3. Негласні слідчі розшукові дії законодавець визначив як різновид слідчих розшукових дій відомості про факт та методи проведення яких не підлягають розголошенню за винятком випадків передбачених Кримінальним процесуальним кодексом України ч. Подано базові нетаємні положення що стосуються організації та тактики проведення негласних слідчих розшукових дій вивчення яких відповідає вимогам підготовки...