14757

МАСШТАБИРОВАНИЕ ИЗОБРАЖЕНИЙ

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

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

Лабораторная лабота №2 Масштабирование изображений Цель: произвести уменьшение и увеличение изображения методами ближайшего соседа и билинейной интерполяцией. Текст программы: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; ...

Русский

2013-06-09

683.18 KB

10 чел.

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

"Масштабирование изображений"

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

Текст программы:

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()

       {

           InitializeComponent();

       }

       public byte[] ar;

       private void button1_Click(object sender, EventArgs e)

       {

           Zoom(2, true);   //увеличить

       }

       private void button2_Click(object sender, EventArgs e)

       {

           Zoom(2, false); // уменьшить

       }

       private void Zoom(double d, bool Zoom)

       {

           d = (Zoom == true ? d : (1 / d));

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

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

           Bitmap tmp = new Bitmap(pictureBox1.Image);

           if (!checkBox1.Checked)

           {

               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++;

                                  }

           }

           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();

               }

           }

           pictureBox1.Width = ZoomImg.Width;

           pictureBox1.Height = ZoomImg.Height;

           pictureBox1.Image = ZoomImg;

       }

       private void button3_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.Image = tek_bmp;

           }

       }

   }

Результаты выполнения работы:

Увеличение методом ближайшего соседа:

Уменьшение методом ближайшего соседа:

Билинейная интерполяция:

Вывод: провели масштабирование изображений различными методами.


 

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

76113. Проектирование и расчет показателей работоспособности и надежности ЛВС 31.77 MB
  В процессе выполнения работы студент решает следующие задачи: выбор типа одноранговая или с выделенным сервером и топологии ЛВС для организации; выбор устройств физического и канального уровня в соответствии с моделью OSI и физическая структуризация сети...
76116. ТЕХНОЛОГІЯ ВИРОБНИЦТВА ГЛЮКОРНУ 1.1 MB
  Актуальність теми. У сучасних умовах забруднення навколишнього середовища недоброякісного виробництва продуктів харчування та високого рівня урбанізації вживання людиною додаткових нутрієнтів із підвищеним рівнем ферментів вітамінів мікро та макроелементів стає все більш необхідним.
76117. НОВЫЙ ВЗГЛЯД НА РУССКУЮ РЕВОЛЮЦИЮ 52.5 KB
  И цель предлагаемой статьи рассмотреть влияние которое недавние политические и интеллектуальные изменения оказывают на изучение революции. В течение семи десятилетий дискуссии о русской революции 1917 г.
76118. Петровские реформы 48.5 KB
  Такова притягательная сила личности Петра Великого первого Российского императора великого реформатора. История России до Петра Великого и после него знала немало реформ. Реформы проводились в течение всего правления Петра I.
76120. Принципы организации и виды финансовой политики предприятия 29.79 KB
  В данной работе рассматривается финансовая палитика предприятия стратегические направления которые определяют долгосрочную и среднесрочную перспективу использования финансов и предусматривают решение главных задач вытекающих из...