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.


 

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

6576. Наследственные аномалии и болезни с наследственной предрасположенностью. Селекция животных на устойчивость к заболеваниям 33.59 KB
  Наследственные аномалии и болезни с наследственной предрасположенностью. Селекция животных на устойчивость к заболеваниям Генетические аномалии у сельскохозяйственных животных. В результате мутаций у животных и человека возникают различные наследств...
6577. Генетика крупного рогатого скота, свиней, овец и птицы 42.86 KB
  Генетика крупного рогатого скота, свиней, овец и птицы Генетика крупного рогатого скота. Скотоводство представляет в нашей стране главную отрасль животноводства. Дальнейшее его развитие связано с увеличением генетического потенциала, возможности кот...
6578. Дидактические материалы к конструированию и анализу урока 191.5 KB
  Дидактические материалы к конструированию и анализу урока Требования к современному уроку 1. Точное и творческое выполнение программно-методических требований к уроку грамотное определение типа урока, его места в разделе, курсе, системе внутрикурсо...
6579. Философия, ее смысл и функции 30.78 KB
  Философия, ее смысл и функции. Истоки философии и её смысл. Философское мировоззрение. Методы философии Структура и функции философии. Термин философия означает буквально любовь к мудрости. Его впервые употребил Пифагор по отнош...
6580. Философия древней Индии и Китая 30.03 KB
  Философия древней Индии и Китая. Философия Древней Индии Философия Древнего Китая Основой многих философских систем Древней Индии явилась ведическая литература и связанная с ним древняя религия брахманизм (по имени Верховного Бога - Бра...
6581. Античная философия. Философские школы Древней Греции 33.05 KB
  Античная философия Античная философия - это философия Древней Греции и Древнего Рима (VII в. до н.э.- III в. н.э.), культурные достижения, которой по праву считаются основой европейской цивилизации. Древнегреческой называется философия, выработанна...
6582. Философская мысль Средних веков, эпохи Возрождения и Нового времени 29.28 KB
  Философская мысль Средних веков, эпохи Возрождения и Нового времени. Философская мысль Средних веков (IV -XIV вв.) Философия эпохи Возрождения(XV - XVI вв.) Философия Нового времени.(XVI - XVII вв.) Средневековье - эпоха господст...
6583. Философия Просвещения. Немецкая классическая философия 37.3 KB
  Философия Просвещения. Немецкая классическая философия XVIII век - век Просвещения, распространения научного знания. Главной идеей философии Просвещения была мысль о ведущей роли разума в деле преобразования и развития европейской цивилизации...
6584. Русская философия от средневековья до первой половины ХХ столетия 34.83 KB
  Русская философия Русская средневековая философия. Русская философия эпохи Просвещения. Русская философия ХIХ - первой половины XX в. Основными темами ранней русской философии были: моральные и нравственные ценности объединени...