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;

           }

       }

   }

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

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

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

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

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


 

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

48610. Структуры магистральной, вертикальной и горизонтальной подсистем варианта СКС 306 KB
  Анализ технических требований выбор архитектуры локальной вычислительной сети.2 Выбор архитектуры локальной вычислительной сети8 4. Выбор и определение структуры технических средств локальной вычислительной сети альтернативные варианты построения логической структуры сети.2 Альтернативные варианты построения сети.
48611. Сокращение трудоемкости статистического моделирования 789.5 KB
  Результаты аналитического решения использовать для проверки результатов статистического моделирования и для обоснования построения рациональной схемы моделирования
48612. Расчёт структуры электромагнитных полей 279 KB
  Цель работы - расчет структуры полей внутри и вне шара а также в волноводе для приведенных в задании геометрических и электрических параметров. Метод исследования метод разделения переменных при интегрировании дифференциальных уравнений для получения аналитических выражений потенциалов и напряженностей полей с последующим построением на ЭВМ структуры этих полей. Для заданной геометрии и параметров среды получены аналитические выражения значений потенциалов и напряженностей полей внутри и вне шара а также расчетное...
48615. Локальные системы автоматики 3.67 MB
  Описание объекта автоматизации Система регулирования температуры пара Исходные данные Выбор типового датчика и нормирующего измерительного прибора для системы регулирования Определение оптимального закона регулирования Определение требуемой ПФ устройства ввода возмущения в компенсирующий канал...
48616. Система регулирования температуры пара 4.47 MB
  Определение оптимальной передаточной функции регулятора. Определение оптимальных параметров настройки регулятора. Выбор унифицированного промышленного регулятора Курсовой проект по курсу âПроектирование современных систем управленияâ посвящен синтезу локальной системы регулирования технологического параметра объекта включающему в себя выбор необходимого закона регулирования регулятора и разработку системы в целом на базе приборов ГСП.
48617. Исследование процесса осадки 249 KB
  Первов Методическое руководство по выполнению курсовой работы Исследование процесса осадки по курсу Теория обработки металлов давлением Рыбинск 2007 Исследование процесса осадки цилиндрических образцов Введение Осадка технологическая операция при которой происходит уменьшение высоты и увеличение площади поперечного сечения исходной заготовки. Для определения силы осадки используют различные методы: решение системы уравнений равновесия совместно с условием пластичности уравнениями связи между напряжениями и деформациями или...