Sunteți pe pagina 1din 3

unit UnitUtama;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ExtDlgs, Menus, StdCtrls,
ComCtrls, Clipbrd, ExtCtrls, Spin;

type
TFormUtama = class(TForm)
PanelAtas: TPanel;
ButtonAmbilCitra: TButton;
StatusBar: TStatusBar;
OpenPictureDialog: TOpenPictureDialog;
ScrollBarAmbang: TScrollBar;
Label1: TLabel;
EditAmbang: TEdit;
procedure ButtonAmbilCitraClick(Sender: TObject);
procedure Olah;
procedure ScrollBarAmbangChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormUtama: TFormUtama;

implementation

uses UnitCitra, UnitHist;

var
FormHasil: TFormCitra;
FormHistHasil: TFormHist;

{$R *.dfm}

procedure TFormUtama.ButtonAmbilCitraClick(Sender: TObject);


var
fc: string;
begin
if (OpenPictureDialog.Execute) then
begin
if (FormCitra = nil) then
Application.CreateForm(TFormCitra, FormCitra);
FormCitra.Image.Picture.LoadFromFile(
OpenPictureDialog.FileName);
FormCitra.ClientHeight :=
FormCitra.Image.Picture.Height;
FormCitra.ClientWidth :=
FormCitra.Image.Picture.Width;
FormCitra.ClientHeight :=
FormCitra.Image.Picture.Height;
case (FormCitra.Image.Picture.Bitmap.PixelFormat) of
pf1bit : fc := 'biner';
pf8bit : fc := 'keabuan';
pf24bit : fc := 'true color';
end;
StatusBar.SimpleText := OpenPictureDialog.FileName
+ ' (' + IntToStr(FormCitra.Image.Picture.Width)
+ 'x' + IntToStr(FormCitra.Image.Picture.Height)
+ ', ' + fc + ')';
if (FormHist = nil) then
Application.CreateForm(TFormHist, FormHist);
FormHist.Top := FormCitra.Top;
FormHist.Left := FormCitra.Left+FormCitra.Width;
FormHist.Picture := FormCitra.Image.Picture;
FormHist.MenghitungHistogram(0);
FormHist.Repaint;
FormCitra.SetFocus;
if (FormHasil = nil) then
Application.CreateForm(TFormCitra, FormHasil);
if (FormHistHasil = nil) then
Application.CreateForm(TFormHist, FormHistHasil);
FormHasil.Caption := 'Citra Hasil';
FormHistHasil.Caption := 'Histogram Citra Hasil';
FormHasil.Image.Picture := FormCitra.Image.Picture;
FormHasil.ClientHeight :=
FormHasil.Image.Picture.Height;
FormHasil.ClientWidth :=
FormHasil.Image.Picture.Width;
FormHasil.ClientHeight :=
FormHasil.Image.Picture.Height;
FormHasil.Top := FormCitra.Top+FormCitra.Height;
FormHasil.Left := FormCitra.Left;
FormHistHasil.Top := FormHasil.Top;
FormHistHasil.Left := FormHasil.Left+FormHasil.Width;
FormHistHasil.Picture := FormHasil.Image.Picture;
FormHistHasil.MenghitungHistogram(0);
FormHistHasil.Repaint;
end;
end;

procedure TFormUtama.Olah;
var
i, j, Ambang, gray: integer;
PC, PH: PByteArray;
begin
Ambang := ScrollBarAmbang.Position;
if (FormCitra.Image.Picture.Bitmap.PixelFormat = pf8bit)
then
for i:= 0 to FormCitra.Image.Picture.Height-1 do
begin
PC := FormCitra.Image.Picture.Bitmap.ScanLine[i];
PH := FormHasil.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to FormCitra.Image.Picture.Width-1 do
begin
if (PC[j] < Ambang) then
PH[j] := 0
else
PH[j] := 255;
end;
end;
if (FormCitra.Image.Picture.Bitmap.PixelFormat = pf24bit)
then
for i:= 0 to FormCitra.Image.Picture.Height-1 do
begin
PC := FormCitra.Image.Picture.Bitmap.ScanLine[i];
PH := FormHasil.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to FormCitra.Image.Picture.Width-1 do
begin
gray := Round((PC[3*j]+PC[3*j+1]+PC[3*j+2])/3);
if (gray < Ambang) then
begin
PH[3*j] := 0;
PH[3*j+1] := 0;
PH[3*j+2] := 0;
end
else
begin
PH[3*j] := 255;
PH[3*j+1] := 255;
PH[3*j+2] := 255;
end
end;
end;
FormHist.Repaint;
FormHist.Canvas.Pen.Color := clPurple;
FormHist.Canvas.MoveTo(10+Ambang, 10);
FormHist.Canvas.LineTo(10+Ambang,FormHist.ClientHeight-10);
end;

procedure TFormUtama.ScrollBarAmbangChange(Sender: TObject);


begin
EditAmbang.Text := IntToStr(ScrollBarAmbang.Position);
if (FormCitra = nil) then
begin
ShowMessage('Belum ada citra yang akan diolah');
exit;
end;
Olah;
FormHasil.Repaint;
FormHistHasil.MenghitungHistogram(0);
FormHistHasil.Repaint;
end;

end.

S-ar putea să vă placă și