Membuat Brightness Pada Delphi

langkah pembuatannya hampir sama dengan cara membuat histogram pada delphi di postingan sebelumnya dan masih dalam satu program.

disini kita hanya menambahakan menu baru di bawah histogram untuk menampilkan brightness.

  1. Buka gambar sebelumnya proyek kami histogram (Anda dapat men-download source code sana jika anda tidak memilikinya).
    Buat bentuk baru (File-> New-> Form).
  2. Ubah properti nama pada BrightnessForm, ubah properti Caption untuk 'Brightness'. atur properti FormStyle pada fsMDIChild. Resize bentuk agar sesuai dengan form utama (form utama).
  3. Pada Object Inspector, klik pada tab Events, dan klik dua kali dalam acara OnClose. Anda akan diarahkan ke event handler, dan menetapkan variabel Aksi dengan caFree antara begin dan and.
Lalu tulis koding di bawah ini :

procedure
TBrightnessForm.FormClose(Sender: TObject;

var
Action: TCloseAction);
begin

Action:=caFree;
end;

Kemudian membuat form pengaturan brightness.

  1. Tambahkan tiga komponen scroll bar (dari palet komponen standar) . Ubah properti Nama untuk RedScrollBar, GreenScrollBar, dan BlueScrollBar. Atur properti minimum dan maksimum dari setiap scroll bar untuk -255 dan 255.
  2. Beri setiap nama pada label sesuai fungsi scrollbar.
  3. Tambahkan dua tombol (dari palet komponen standar), dan beri nama OK dan CANCEL.
  4. Simpan unit ini sesuai BrightnessUnit (menggunakan menu File-> Save As).
  5. Buka Form Proyek-> Pilihan-> BrightnessForm dan tekan >, sehingga BrightessForm akan pindah ke kotak yang tersedia formulir, kemudian tekan OK.
tulis koding secara keseluruhan untuk form utama seperti di bawah ini.

unit MainUnit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtDlgs, Menus;

type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
CLose1: TMenuItem;
Exit1: TMenuItem;
OpenPictureDialog1: TOpenPictureDialog;
SavePictureDialog1: TSavePictureDialog;
StatusBar1: TStatusBar;
Image1: TMenuItem;
Histogram1: TMenuItem;
Brightness1: TMenuItem;
procedure Open1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure Histogram1Click(Sender: TObject);
procedure CLose1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Brightness1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

uses ImageUnit, ActiveX, HistogramUnit, BrightnessUnit;

{$R *.dfm}

procedure TMainForm.Open1Click(Sender: TObject);
var
formatInfo:string;
begin
if OpenPictureDialog1.Execute then
begin
Application.CreateForm(TImageForm, ImageForm);
ImageForm.Image1.Picture.LoadFromFile(
OpenPictureDialog1.FileName);
ImageForm.ClientHeight:=
ImageForm.Image1.Picture.Height;
ImageForm.ClientWidth:=
ImageForm.Image1.Picture.Width;
case (ImageForm.Image1.Picture.Bitmap.PixelFormat) of
pf1bit : formatInfo:='Binary';
pf8bit : formatInfo:='Gray scale';
pf24bit: formatInfo:='True color';
end;
StatusBar1.SimpleText:= OpenPictureDialog1.FileName +' '+
IntToStr(ImageForm.Image1.Picture.Width) + 'x'+
IntToStr(ImageForm.Image1.Picture.Height) + ' '+
formatInfo;
end;
end;

procedure TMainForm.Save1Click(Sender: TObject);
begin
try
begin
if SavePictureDialog1.Execute then
TImageForm(ActiveMDIChild).Image1.Picture.SaveToFile(
SavePictureDialog1.FileName);
end
except
ShowMessage('Cannot complete the operation');
end;
end;

procedure TMainForm.Histogram1Click(Sender: TObject);
begin
if ImageForm<>nil then
begin
ImageForm:=TImageForm(ActiveMDIChild);
try
begin
Application.CreateForm(THistogramForm,HistogramForm);
HistogramForm.ShowHistogram(ImageForm.Image1);
end;
except
HistogramForm.Free;
ShowMessage('Cannot complete the operation');
end;
end;
end;

procedure TMainForm.CLose1Click(Sender: TObject);
begin
try
ActiveMDIChild.Close;
except
ShowMessage('Cannot complete the operation');
end;
end;

procedure TMainForm.Exit1Click(Sender: TObject);
begin
Close;
end;

procedure TMainForm.Brightness1Click(Sender: TObject);
begin
if ImageForm<>nil then
begin
ImageForm:=TImageForm(ActiveMDIChild);
try
begin
Application.CreateForm(TBrightnessForm,BrightnessForm);
Brightnessform.SetBrightness(ImageForm.Image1);
end;
except
BrightnessForm.Free;
ShowMessage('Cannot complete the operation');
end;
end;
end;

initialization
OleInitialize(nil);
finalization
OleUninitialize
end.

Tulis koding secara keseluruhan untuk form pengaturan brightness seperti di bawah ini.

design form tampak pada gambara di samping.













unit BrightnessUnit;

interface

uses
ExtCtrls, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TBrightnessForm = class(TForm)
RedScrollBar: TScrollBar;
GreenScrollBar: TScrollBar;
BlueScrollBar: TScrollBar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
OKButton: TButton;
CancelButton: TButton;
procedure RedScrollBarChange(Sender: TObject);
procedure GreenScrollBarChange(Sender: TObject);
procedure BlueScrollBarChange(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CancelButtonClick(Sender: TObject);
private
{ Private declarations }
TemporaryImage:TImage;
OriginalImage:TImage;
Applied:boolean;
public
{ Public declarations }
procedure SetBrightness(Image: TImage);
end;

var
BrightnessForm: TBrightnessForm;

implementation

{$R *.dfm}

procedure TBrightnessForm.SetBrightness(Image: TImage);
begin
try
begin
TemporaryImage:=Image;
OriginalImage:=TImage.Create(self);
OriginalImage.Picture.Bitmap.Assign(Image.Picture.Bitmap);
end;
except
begin
Free; //free the brightness form
ShowMessage('Cannot complete the operation');
end;
end;
end;

procedure TBrightnessForm.RedScrollBarChange(Sender: TObject);
var
i,j:Integer;
temp:integer;
pixelPointer:PByteArray;
originalPixelPointer:PByteArray;
begin
try
begin
for i:=0 to TemporaryImage.Height-1 do
begin
pixelPointer:=TemporaryImage.Picture.Bitmap.ScanLine[i];
originalPixelPointer:=OriginalImage.Picture.Bitmap.ScanLine[i];
for j:=0 to TemporaryImage.Width-1 do
begin
temp:=originalPixelPointer[3*j+2]+ RedScrollBar.Position;
if temp<0 then temp:=0;
if temp>255 then temp:=255;
pixelPointer[3*j+2]:=temp;
end;
end;
TemporaryImage.Refresh;
end;
except
begin
Free;
ShowMessage('Cannot complete the operation');
end;
end;
end;

procedure TBrightnessForm.GreenScrollBarChange(Sender: TObject);
var
i,j:Integer;
temp:integer;
pixelPointer:PByteArray;
originalPixelPointer:PByteArray;
begin
try
begin
for i:=0 to TemporaryImage.Height-1 do
begin
pixelPointer:=TemporaryImage.Picture.Bitmap.ScanLine[i];
originalPixelPointer:=OriginalImage.Picture.Bitmap.ScanLine[i];
for j:=0 to TemporaryImage.Width-1 do
begin
temp:=originalPixelPointer[3*j+1]+ GreenScrollBar.Position;
if temp<0 then temp:=0;
if temp>255 then temp:=255;
pixelPointer[3*j+1]:=temp;
end;
end;
TemporaryImage.Refresh;
end;
except
begin
Free;
ShowMessage('Cannot complete the operation');
end;
end;
end;

procedure TBrightnessForm.BlueScrollBarChange(Sender: TObject);
var
i,j:Integer;
temp:integer;
pixelPointer:PByteArray;
originalPixelPointer:PByteArray;
begin
try
begin
for i:=0 to TemporaryImage.Height-1 do
begin
pixelPointer:=TemporaryImage.Picture.Bitmap.ScanLine[i];
originalPixelPointer:=OriginalImage.Picture.Bitmap.ScanLine[i];
for j:=0 to TemporaryImage.Width-1 do
begin
temp:=originalPixelPointer[3*j]+ BlueScrollBar.Position;
if temp<0 then temp:=0;
if temp>255 then temp:=255;
pixelPointer[3*j]:=temp;
end;
end;
TemporaryImage.Refresh;
end;
except
begin
Free;
ShowMessage('Cannot complete the operation');
end;
end;
end;

procedure TBrightnessForm.OKButtonClick(Sender: TObject);
begin
Applied:=true;
Close();
end;

procedure TBrightnessForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if Applied=false then
TemporaryImage.Picture.Bitmap.Assign(
OriginalImage.Picture.Bitmap);
Action:=caFree;
end;

procedure TBrightnessForm.CancelButtonClick(Sender: TObject);
begin
Applied:=false;
Close;
end;
end.

hasil dari gambar yang terlihat, scorllbar yang mewakili dari red, green dan blue, jika semakin di kecilkan intensitasnya akan semakin mengurangi warna tersebut. dan juga sebaliknya, jika intensitasnya di perbesar akan semakin mendominasi warna tersebut. gambar yang normal adalah gambar yang ukuran warna red, green dan blue nya seimbang.


Komentar

  1. makasi banyak Artikelnya ,
    ini sangat membantu untuk pembuatan Tugas !!!

    BalasHapus
  2. gan ada gak yang dari awal nya cara buat menu menu nya, masukkan gambar nya dan menambahkan tombol fungsi kalau ada tolong sharing dong untuk tugas projek semester saya

    BalasHapus

Posting Komentar

Postingan Populer