51343

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

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

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

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

Русский

2014-02-09

673 KB

11 чел.

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

}

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

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


 

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

48663. Методи розрахунку новітніх макроекономічних показників 156 KB
  Із нових макроекономічних показників ми розглянемо індекс людського розвитку індекс економічної свободи та рівень глобалізації. Актуальність даної теми дослідження полягає в тому що новітні макроекономічні показники дають змогу комплексно охарактеризувати стан економіки та рівень життя тієї чи іншої країни. Розвиток всього суспільства здійснюється надзвичайно швидкими темпами тому необхідно покращувати методику розрахунку цих показників враховувати нові чинники та фактори що впливають на їх рівень. Обєктом дослідження є індекс...
48665. Найти полосу пропускания сигнала и частоту следования передаваемых импульсов, если на экране телевизора при этом наблюдается 120 чередующихся черно-белых полос (вертикальных) 107 KB
  Ответ: На рисунке 2 приведен вариант комплектации АФТ системы в которой реализуется частотный план. При этом многократное использование АФТ достигается на основе применения всех известных способов селекции радиоволн: по частоте по поляризации и по направлению распространения трехступенчатая схема разделения. Рисунок 2 структурные схемы АФТ Элементами структурной схемы на рисунке 2 являются: приемопередающая антенна А; переход П обеспечивающий согласование фидеров различной конструкции в данном случае согласование антенны с...
48666. Проектирование схем энергоснабжения промышленного предприятия 440 KB
  Расчет электрических нагрузок низшего напряжения цехов предприятия Расчетные нагрузки цехов определяются по средней мощности с учетом корректирующего коэффициента . Расчетные нагрузки на напряжение ниже 1000 В определяются следующими выражениями: 1. Силовые нагрузки на напряжение 16 кВ Рр.2 где Руст установленная мощность силового оборудования цеха кВт; Ки коэффициент использования;  корректирующий коэффициент; tg соответствует характерному для данного цеха коэффициенту мощности нагрузки.
48667. Eкспортно-імпортної політики України в умовах світової економічної кризи 817 KB
  Вона складається з ввозу імпорту і вивозу експорту товарів. До експорту відносять: товари вироблені вирощені чи добуті в країні; товари раніше ввезені зза кордону що були перероблені а також товари переробка яких здійснювалась під митним контролем. Оскільки основна частка товарів в міжнародній торгівлі перевозиться морським транспортом за основу розрахунку цін експорту та імпорту береться транспортування морем. В результаті відмінності в базі розрахунків сукупна вартість світового експорту статистично буде завжди менше вартості...
48669. Расчет цифровой логической КМОП микросхемы серии КР1554 413.5 KB
  В момент времени to выхода вершины несорбирующегося компонента Zo сигнал с выхода пикового детектора 6 устанавливает триггер 27 в единичное состояние. Высокий потенциал с его прямого выхода запускает тактовый генератор импульсов 10. В момент времени выхода вершины пика компонента Z сигнал с выхода пикового детектора 6 поступает на вход установки в ноль триггера 19. Высокий потенциал с его инверсного выхода поступает на один из входов элемента И 7.
48670. Система электроснабжения района города, расположенного в Пермской области 1.03 MB
  Рассмотрим 2 варианта формирования сети 10 кВ схема с питанием непосредственно от источника питания и вариант с сооружением РТП. Определение места расположения РТП проводится по формулам. РТП см м Xтп 14.38 Таким образом целесообразное место организации РТП это подстанция.
48671. Кредитування підприємств в сучасних умовах розвитку економіки 138.5 KB
  Для регулювання діяльності комерційних банків Національний Банк України визначає для них такі економічні нормативи: мінімальний розмір статутного фонду; граничне співвідношення між розміром власних коштів банку і сумою його активів; показники ліквідності балансу. Визначається в процентному відношенні до загальної суми власних коштів банку. У разі систематичного недотримання комерційними банками цього законодавства Центральний банк може: ставити перед засновниками комерційного банку питання про здійснення заходів з фінансового...