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

12 чел.

Лабораторная лабота №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;

           }

       }

   }

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

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

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

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

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


 

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

72874. Круговорот азота в природе 61 KB
  Приблизительно 78 всего объема атмосферы приходится на долю азота. Растения усваивают ионы аммония NH4 и нитраты NO3 Для того чтобы N преобразовался в легкорастворимые соли необходимо участие азотфиксирующих бактерий или синезеленых водорослей цианобактерии.
72875. Круговорот углерода в природе 64.5 KB
  Каменный уголь содержит до 90 углерода. В форме доксида углерода он входит в состав земной атмосферы в которой на его долю приходится 0046 массы. Из углерода в биосфере создаются миллионы органических соединений.
72876. Пищевые цепи и сети 70.5 KB
  Пищевые цепи и сети. Таким образом пищевые цепи переплетаются образуя пищевые сети. Пищевые сети служат основой для построения экологических пирамид.
72877. Экологические системы. Понятия «биоценоз», «биотоп», «биогеоценоз», «экосистема». Гомеостаз экосистемы (устойчивость и стабильность) 61.5 KB
  Важнейшими показателями динамики экосистем являются устойчивость и стабильность. Иногда понятия устойчивость и стабильность рассматриваются как синонимы но тогда следует различать два вида устойчивости: резидентная устойчивость стабильность способность оставаться в устойчивом...
72878. Экология сообществ. Биоценоз. Видовая, пространственная и экологическая структуры биоценоза 61.5 KB
  Видовая пространственная и экологическая структуры биоценоза. Различают видовую пространственную и экологическую структуру биоценоза. Показателями значимости каждого отдельного вида в видовой структуре биоценоза являются: обилие вида т.
72879. Экология популяций. Ареал. Статические и динамические показатели популяции 62 KB
  Статические и динамические показатели популяции Популяция это элементарная группировка организмов определенного вида обладающая всеми необходимыми условиями для поддержания своей численности необозримо длительное время в постоянно изменяющихся условиях среды.
72880. Экологическая валентность (толерантность, устойчивость, пластичность). Лимитирующий фактор 66.5 KB
  Количественно выражается интенсивностью и диапазоном действия экологических факторов при которых вид сохраняет нормальную жизнедеятельность. Действия факторов характеризуются их дозировкой амплитудой размахом колебаний. при оптимальной интенсивности факторов.
72881. Экологические биотические факторы среды: антагонистические (хищничество, паразитизм, конкуренция), неантагонистические (симбиоз - сожительство, мутуализм – взаимный, комменсализм – сотрапезник) 64 KB
  Экологические биотические факторы среды: антагонистические хищничество паразитизм конкуренция неантагонистические симбиоз сожительство мутуализм взаимный комменсализм сотрапезник. Конкуренция это использование ресурсов пищи воды света пространства одним организмом который тем самым...
72882. Экологические факторы и их классификация 59.5 KB
  Любой организм в природе испытывает на себе воздействие самых разнообразных компонентов внешней среды. Факторы среды экологические факторы разнообразны имеют разную природу и специфику действия. Абиотические факторы неживой природы: а климатические условия освещенности температурный режим и т.