51343

Работа с пикселями изображения

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

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

Цель работы: Написать программу, осуществляющую побитовое копирование из одного изображения в другое. Изображение открывается через диалог открытия файла с расширением .bmp. Копированию подлежит только одна из составляющих цвета (красная-зелёная-синяя).

Русский

2014-02-09

673 KB

10 чел.

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

Работа с пикселями изображения

Выполнил: Шуклецов М.А.

 ФРТ, гр. 2106

Цель работы: Написать программу, осуществляющую побитовое копирование из одного изображения в другое. Изображение открывается через диалог открытия файла с расширением *.bmp. Копированию подлежит только одна из составляющих цвета (красная-зелёная-синяя).

При выполнении лабораторной работы, я за исходное изображение взял:

 

Общий вид программы следующий:

Здесь мы видим следующие элементы управления:

«Выбор картинки» - через OpenDialog мы выбираем изображение, путь к которому отображается в окне Edit

«Red», «Green», «Blue» - кнопки, показывающие один из цветов, т.е. красный-зеленый-голубой соответственно (применен зелёный фильтр)

«Обратить цвета» - выполняет команду обращения цвета (доп. задание), т.е. мы получаем

Код программы:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

}

//---------------------------------------------------------------------------

Graphics::TBitmap* pBitmap1 = new Graphics::TBitmap();

Graphics::TBitmap* pBitmap2 = new Graphics::TBitmap();

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)  // Кнопка «Выбор картинки»

{

if(OpenDialog1->Execute())     //Открытие диалогового окна

{

  Edit1->Text=OpenDialog1->FileName;   //При Выборе происходит запись пути в Edit

  pBitmap1->LoadFromFile(Edit1->Text);   //Загрузка картинки в память по указателю

 }

Image1->Left=0;       

Image1->Top=0;      //Задание начального положения для Image1

 Image1->Width=pBitmap1->Width;

Image1->Height=pBitmap1->Height;   //Задание размеров для Image1

Image1->Picture->Assign(pBitmap1);   //Загрузка изображения в Image1

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)   //Кнопка «Green»

{

if(pBitmap1->PixelFormat == pf24bit)     //Проверка изображения на битность

{

 Byte G;   

 Byte *ptr;

 int x,y;        //Инициализация переменных

 pBitmap1->LoadFromFile(Edit1->Text);

for(y=0; y < pBitmap1->Height; y++)    

 {

   ptr=(Byte*)pBitmap1->ScanLine[y];

   for(x=0; x < pBitmap1->Width; x++)

       {

        G = *(ptr + x*3+1);      //Вычисление значения зеленого цвета

        pBitmap1->Canvas->Pixels[x][y] = TColor(RGB(0,G,0)); //Загрузка в память полученного изобр.

       }

 }

}

Image1->Picture->Assign(pBitmap1);    //Заполнение Image1 Полученным изобр.

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)  //Кнопка «Red»

{

if(pBitmap1->PixelFormat == pf24bit)

{

 Byte R;

 Byte *ptr;

 int x,y;

 pBitmap1->LoadFromFile(Edit1->Text);

for(y=0; y < pBitmap1->Height; y++)

 {

   ptr=(Byte*)pBitmap1->ScanLine[y];

   for(x=0; x < pBitmap1->Width; x++)

       {

       R = *(ptr + x*3);

       pBitmap1->Canvas->Pixels[x][y] = TColor(RGB(R,0,0));

       }

 }

}

Image1->Picture->Assign(pBitmap1);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)  // Кнопка «Blue»

{

if(pBitmap1->PixelFormat == pf24bit)

{

 Byte B;

 Byte *ptr;

 int x,y;

 pBitmap1->LoadFromFile(Edit1->Text);

for(y=0; y < pBitmap1->Height; y++)

 {

   ptr=(Byte*)pBitmap1->ScanLine[y];

   for(x=0; x < pBitmap1->Width; x++)

       {

       B = *(ptr + x*3+2);

       pBitmap1->Canvas->Pixels[x][y] = TColor(RGB(0,0,B));

       }

 }

}

Image1->Picture->Assign(pBitmap1);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)  //Кнопка «Обратить цвета»

{

if(pBitmap1->PixelFormat == pf24bit)

{

 Byte R,G,B;

 Byte *ptr;

 int x,y;

 pBitmap1->LoadFromFile(Edit1->Text);

for(y=0; y < pBitmap1->Height; y++)

 {

   ptr=(Byte*)pBitmap1->ScanLine[y];

   for(x=0; x < pBitmap1->Width; x++)

       {

       R = *(ptr + x*3);

       G = *(ptr + x*3+1);

       B = *(ptr + x*3+2);

       pBitmap1->Canvas->Pixels[x][y] = TColor(RGB(255-R,255-G,255-B));

       }

 }

}

Image1->Picture->Assign(pBitmap1);

}

//---------------------------------------------------------------------------

Вывод: Мы получили примитивный фильтр для изображений, научились получать доступ к пикселям и использовать полученные навыки для написания данной программы.


 

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

20111. Позиционные, интегрирующие и дифференцирующие типовые динамические звенья их частотные характеристики 45.5 KB
  Типовое динамическое звено описываемое уравнением не выше второго порядка так как реальные звенья составляются на основании законов выражаемых уравнениями не выше второго порядка.1 Безинерционное идеальное звено звено которое в установившемся режиме и в переходном режиме описывается уравнением y = kx На практике идеальным звеном принимают то звено у которого постоянная времени значительно меньше постоянной времени последующих звеньев 1.2 Апериодическое звено первого порядка звено которое...
20112. Структурные схемы систем автоматического управления 903 KB
  Структурной схемой называется схема отражающая взаимодействие динамических звеньев в процессе работы системы. Может содержать: 1 элемент с 1 входом и 1 выходом 1 элемент 2 входа и 1 выход узел сумматор сравнивающее устройство Последовательное соединение динамических звеньев Общая передаточная функция равна произведению составляющих функций динамических звеньев Параллельное соединение Встречнопараллельное соединение – общая передаточная функция если обратная связь отрицательна если обратная связь положительна Если в...
20113. Качество переходных процессов. Частотные показатели качества САР 44 KB
  При этом используют АЧХ замкнутой системы Фjw АЧХ разомкнутой системы Wjw ВЧХвещественночастотная характеристика замкнутой системы Uw.22π Wm 2Использование ВЧХ замкнутой системы для оценки качества. Для устойчивых автоматических систем ВЧХ связана с переходной функцией ht следующей зависимостью: Используя это соотношение можно косвенно оценить границы переходного процесса по амплитуде и длительности. Для того чтобы косвенно судить о качестве рассмотрим свойства ВЧХ и свойства и свойства соответствующих им переходных...
20114. Синтез последовательных корректирующих звеньев 130.5 KB
  Рассмотрим основные виды обр. Жесткая отрицательная обр. связь осуществляется за счет охвата некоторого элемента сисмы обр. связью с передаточной функцией усилительного звена то есть в цепи обр.
20115. Шлифовальные станки. Их классификация 7.26 MB
  Шлифовальные станки. В зависимости от вида обработки шлифовые станки подразделяются на: станки общего назначения; специализированные станки. Круглошлифовальные станкию.
20116. Причины возникновения погрешностей измерительных устройств 27 KB
  Погрешности схемы прибора. Технологические погрешности. Динамические погрешности. Температурные погрешности.
20117. Методы размерного точностного синтеза. 104.5 KB
  Основная задача: выбор номинальных параметров измерительной цепи по критерию min теоретической погрешности. С точки зрения min погрешности существуют 3 категории ИУ: Устройство которые должны иметь min погрешность только при определенном значении входного сигнала. Для них min погрешность – это min наклон погрешности Все остальные ИУ у которых при любом значении входного сигнала одинакова неприятна теоретическая погрешность. Min погрешность для них – min модуля максимума погрешности.
20118. Погрешности показаний, обусловленные схемой измерительного устройства 34 KB
  устройства: Действительное показание устройства: Погрешность показаний измер. устройства: Функция в общем случае не линейна может быть сложной и только в частном случае линейной. устройства а второй член оставшийся в правой части.
20119. Средства измерения шероховатости поверхности 188.5 KB
  В настоящее время накоплен значительный теоретический и эксплуатационный материалы по связи шероховатости со следующими эксплуатационными показателями: 1 – износостойкость при всех видах трения; 2 – контактная жесткость; 3 – выносливость; 4 – прочность посадок с натягом; 5 – отражательная способность поверхности; 6 – прочность сцепления при склеивании; 7 – коррозионная стойкость; 8 – лакокрасочные покрытия; 9 – точность при измерении. После отражения от поверхности пучок проходит 2 и 10 и попадает на 6. Поэтому оператор через окуляр 7 видит:...