51343

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

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

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

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

Русский

2014-02-09

673 KB

7 чел.

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

}

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

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


 

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

1547. Моделирование программного обеспечения 100.15 KB
  Создание контекстной диаграммы (используя IDEF0). Выполнение процесса декомпозиции модели по результатам разработки контекстной диаграммы. Создание диаграммы вариантов использования и описание потоков. Построение диаграммы вариантов использования.
1548. Русская литература ХІХ века. Известные личности 227.16 KB
  Южные поэмы А.С. Пушкина. Драматургия А.П. Чехова. М.Ю. Лермонтов. Лирика. Новаторство драматургии Н.А. Островского. Новаторство прозы А.П. Чехова. Поэзия Ф.И. Тютчева. Л.Н. Толстой. Война и мир. Сюжет и образы. М.Ю. Лермонтов. Роман Герой нашего времени. Сюжет и композиция.
1549. Фінанси та фінансова система України 88.09 KB
  Сутність, особливості функціонування та інструменти грошового ринку. Попит на гроші: сутність, цілі та мотиви попиту на гроші. Чинники, що впливають на попит на гроші. Крива попиту на гроші. Поняття та призначення валютних систем. Елементи національної валютної системи. Розвиток валютної системи в Україні. Небанківські фінансово-кредитні установи, їх види, та особливості функціонування в Україні.
1550. Установка числа корней полинома (с учетом их кратности) 101.35 KB
  Бесконечная и конечная многоугольные области. Геометрические условия, определяющие распределение корней. Алгебраические соотношения, определяющие распределение корней.
1551. Психология и педагогика высшей школы 195 KB
  Психология и педагогика высшей школы: предмет, объект, задачи, категории. Связь с другими науками. Основные направления реформирования образования 21 века и проблемы современной высшей школы. Образовательные уровни и образовательно-квалификационные уровни. Уровни аккредитации и типы вузов. Развитие студенческой группы, характеристика студенческого коллектива. Межличностные отношения в студенческой группе.
1552. Грошово-кредитна політика України 191 KB
  Суть, призначення і цілі грошово-кредитної політики. Концепція виникнення грошей. Роль держави у творенні грошей. Розвиток форм грошей. Їх різновиди і характеристика. Причини та значення демонетизації Gold. Сутність, грошового обороту, його економічна основа, визначальні риси. Грошовий обіг на макро- і мікрорівнях.
1553. Основы энергосбережения 196.5 KB
  Восполняемые и невосполняемые энергетические ресурсы. Виды топлива, их характеристика и запасы. Тепловые и атомные электрические станции (ТЭС и АЭС), гидроэлектростанции. Транспортирование и потребление тепловой и электрической энергии. Электроэнергетические системы и электрические сети. Структура потребления ТЭР.
1554. Характеристика предприятий и предпринимательства 180.5 KB
  Организационно-правовые формы предприятия. Ответственность юридического лица. Коммерческие и некоммерческие организации. Хозяйственные товарищества и общества. Государственные и муниципальные унитарные предприятия. Общественные и религиозные организации (объединения). Объединения юридических лиц (ассоциации и союзы).
1555. Экзаменационный тест по ИНФОРМАТИКЕ 102.34 KB
  Определите значение переменной c после выполнения следующего фрагмента программы. У исполнителя Утроитель две команды, которым присвоены номера. Доступ к файлу htm.net, находящемуся на сервере com.edu, осуществляется по протоколу ftp. В таблице фрагменты адреса файла закодированы буквами от А до Ж.