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

11 чел.

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

           }

       }

   }

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

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

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

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

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


 

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

21051. Повреждающее действие на клетки фактороввнешней среды. Перекисное окисление липидов (ПОЛ) 50 KB
  Перекисное окисление липидов ПОЛ. ЦЕЛЬ ЛЕКЦИИ: Изучить механизмы ПОЛ и их роль в повреждении клеток. Общая характеристика ПОЛ. Механизмы ПОЛ.
21052. Патофизиология лихорадки и гипертермии 35.5 KB
  ЦЕЛЬ ЛЕКЦИИ: Изучить вопросы этиологии патогенеза и патогенетической терапии лихорадки и гипертермии. Характеристика лихорадки и гипертермии как типовых патологических процессов. Этиология и патогенез лихорадки типы температурных кривых.
21053. Патофизиологическая характеристика воспаления 28.5 KB
  Определение и классификация воспаления. Характеристика методов воспаления. Мечникова в изучение воспаления. Значение воспаления для организма.
21054. Резистентность и реактивность. Неспецифические факторы защиты организма 36.5 KB
  Реактивность это способность организма отвечать изменениями жизнедеятельности на факторы внешней и внутренней среды как в условиях нормы так и в условиях патологии. Реактивность определяет состояние резистентности. Высокая реактивность определяет низкую резистентность.
21055. Патологическая физиология аллергических реакций 36 KB
  Скорость накожной реакции после внутрикожного введения аллергена больному аллергией: а немедленного типа ГНТ волдырь. б замедленного типа ГЗТ 4872 часа инфильтрат. По локализации субстрата с которым можно перенести аллергию от больного к здоровому: а ГНТ гуморальный тип. б ГЗТ клеточный тип.
21056. Патофизиология опухолевого роста 21 KB
  Цель лекции: Рассмотреть современное состояние вопроса этиологии и патогенеза злокачественных опухолей. План лекции: Определение опухолей современные представления об этиологии и патогенезе опухолей отличие доброкачественных и злокачественных опухолей. Анаплазия это изменение структуры и биологических свойств опухолей делающих их похожими на недифференцированные ткани. Этиология опухолей факторы вызывающие развитие опухолей называются канцерогенными или бластогенными.
21057. Патофизиология анемий 34 KB
  Этиология патогенез и гематологическая характеристика острой постгеморрагической анемии. Этиология патогенез и гематологическая характеристика В12 и фолиеводефицитной анемии. По типу эритропоэза выделяет нормобластические и мегалобластические анемии. По диаметру эритроцитов выделяют нормоцитарные анемии 7585 мкм; макроцитарные анемии более 85 мкм; микроцитарные анемии менее 75 мкм.
21058. Патологическая физиология лейкоцитозов и лейкопений 27.5 KB
  По лейкограмме устанавливают вид сдвига ядра нейтрофилов при нейтрофильном лейкоцитозе. Существуют пять видов сдвига ядра нейтрофилов: 1. Гипорегенеративный сдвиг влево характеризуется абсолютным и относительным увеличением содержания сегментоядерных нейтрофилов. Регенеративный сдвиг характеризуется увеличением содержания сегментоядерных и палочкоядерных нейтрофилов.
21059. Патофизиология гемобластозов 17 KB
  ЦЕЛЬ ЛЕКЦИИ: Изучить этиологию патогенез принципы терапии и диагностики гемобластозов. ПЛАН ЛЕКЦИИ: Современные представления об этиологии и патогенезе гемобластозов. Классификация гемобластозов.