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.


 

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

79681. Технологии управления персоналом 207 KB
  Способы организации досуга персонала с. Возможные методы поощрения сотрудников со стороны организации. В этом качестве персонала организации они нуждаются в управлении. В современных условиях научно-технического прогресса когда технологии а вместе с ними и профессиональные навыки устаревают в течение нескольких лет способность сотрудников к постоянному совершенствованию и развитию представляет собой наиболее важный и долговременный источник повышения эффективности деятельности любой организации.
79682. Проблемы и препятствия на пути воздействия на трудовую мотивацию персонала. Пути совершенствования мотивации труда 324.5 KB
  Государственное управление заключает в себе огромный материальный и человеческий риск. Это прежде всего высокие затраты, опасность ущемления общественного благосостояния, и, вызванная последним, низкая репутация чиновничества и государства в целом в глазах общественности.
79683. Факторы формирования чувства преданности организации 153.5 KB
  Определение понятия преданность организации. Психологические механизмы лежащие в основе чувства преданности организации. Приверженность организации и самочувствие.
79684. Формирование кадровой политики предприятия связи ОАО Липеком 739.5 KB
  Практика управления предприятием связи Липеком. Кадры управления менеджеры и их роль в процессе деятельности предприятия. Общая характеристика управления кадрами. Статья приложения структуры управления Липекома и статья приложения аудиторской проверки сканированы и отпечатаны с оригинала.
79685. Создание тренинга. Разработка программы тренинга 122 KB
  Разработка программы тренинга. С Заказчиком обсуждаются следующие вопросы: цели и задачи предстоящего тренинга Цели должны представлять направление на долгосрочную перспективу. Но можно по крайней мере оценить достаточно ли было упражнений на отработку навыков помогал ли тренер в процессе этих упражнений изучал ли тренер компанию и группу до тренинга и есть ли посттренинговое сопровождение.
79686. ПРИЧИНЫ ВОЗНИКНОВЕНИЯ БЕЗРАБОТИЦЫ. ВЛИЯНИЕ ЭКОНОМИКИ НА БЕЗРАБОТИЦУ 135 KB
  Закона о занятости населения в Российской Федерации Безработными признаются трудоспособные граждане которые не имеют работы и заработка зарегистрированы в органах службы занятости в целях поиска подходящей работы ищут работу и готовы приступить к ней. В Законе РФ О занятости населения в РФ определена политика государства в области занятости населения права граждан в области занятости а также вопросы регулирования организации занятости и создания государственной службы занятости населения. Международная Организация Труда...
79687. Деятельность кадрового подразделения организации 246.5 KB
  Любая организация существует только тогда, когда есть работающие в ней люди. Открытие какой угодно фирмы, предприятия, учреждения, организации начинается с подбора и оформления работников. Поэтому наличие службы кадров или специально выделенного сотрудника, занимающегося оформлением кадров, обязательно для организации не только любого масштаба, но и любой организационно-правовой формы.
79688. Обучение персонала как фактор повышения эффективности работы организации 785.5 KB
  Исследовать пути создания конкурентных преимуществ организации в рыночных условиях хозяйствования; обосновать важность человеческого ресурса как главного ресурса в организации; рассмотреть понятие кадрового потенциала и пути его повышения; рассмотреть порядок организации работы по обучению персонала и систематизировать методы обучения...
79689. Газовая сварка и термическая резка 444.5 KB
  В строительстве газовая сварка находит широкое применение при монтаже трубопроводов в системах водоснабжения и отопления жилых и производственных зданий. С помощью газового пламени производят наплавку поверхностных слоев изношенных частей машин и оборудования (зубьев ковшей экскаваторов, ножей бульдозеров и т.п.).