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);

}

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

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


 

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

57975. Da - Sätze 776.5 KB
  Mein Freund spielt Fußball nicht mit, denn er hat viel zu tun. Karin wollte mit uns ins Kino nicht gehen, denn sie war schlechter Laune (настрій). Ich kann nicht alles verstehen, denn ich kann Deutsch nicht gut.
57976. DECORATIONS (ПРИКРАСИ) 2.51 MB
  Hello, Vicky. Nice to see you. How’re you today? I want to tell you some compliments. This sweater suits you perfectly. Vicky: I’m glad you like it. Thank you for the compliments. Teacher: Using the cheat sheet on the blackboard play the same little greeting dialogue with your classmates.
57977. Дизайн-фотостудия: «Лови момент». Урок информатики 194.5 KB
  Тип урока: урок систематизации и совершенствования знаний умений и навыков. Вид урока: практическая работа. Оборудование: компьютерный класс Программное обеспечение: Windows XP dobe Photoshop PowerPoint2003 Методическое обеспечение урока...
57978. Природний добір як головний рушійний, творчий чинник еволюції. Форми природного добору 66.5 KB
  Мета: Сформувати поняття про природний добір як головний рушійний творчий чинник еволюції про форми природного добору. Епіграф Природний добір щодня і щогодини розслідує у всьому світі найдрібніші зміни відкидаючи погані зберігаючи і складаючи добрі працюючи нечутно...
57979. Действия с десятичными дробями (сравнение, округление, сложение и вычитание) 45.5 KB
  Сегодня предстоит выполнить на уроке важную, нужную и интересную работу. Чтобы достичь успеха, надо всем работать дружно, с большим желанием, используя знания предыдущих уроков.
57980. Действия с десятичными дробями 177 KB
  Учащиеся из ответов собирают пазл картинку планеты и пытаются Узнать что это за планета Учитель показывает планеты и рассказывает интересные факты. МАРС - четвертая от Солнца планета. САТУРН - вторая по величине планета шестая от Солнца. ЮПИТЕР - самая большая планета Солнечной системы.
57981. Всі дії з звичайними дробами 1.28 MB
  Перша команда залишається на місці працюватиме з дошкою (додаток 3), друга сідає за компютери (компютери включені на початку уроку учителем для рівноцінної роботи команд) учні відкривають програму під назвою - тестування на тему дроби...
57982. ДЕЙСТВИЯ С ОБЫКНОВЕННЫМИ ДРОБЯМИ 1.3 MB
  Цель. Обобщить и систематизировать знания учащихся об обыкновенных дробях, дробных числах; закрепить умения и навыки использования алгоритмов действий с обыкновенными дробями в процессе решения упражнений и задач.
57983. Додавання і віднімання дробів з однаковим знаменником 8.42 MB
  Сьогодні знову у пошуках друга потрапила дівчина у дивовижну казку але казка ця незвичайна казка математична і на своєму шляху зустрінеться Герда із математичними перешкодами. Одного дня Кай і Герда сиділи й роздивлялися книжку.