Sie sind auf Seite 1von 3

unit UnitUtama;

interface

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

type
TFormUtama = class(TForm)
PanelAtas: TPanel;
ButtonAmbilCitra: TButton;
StatusBar: TStatusBar;
OpenPictureDialog: TOpenPictureDialog;
ButtonAmbilCitra2: TButton;
ButtonBlending: TButton;
RadioButtonPola1: TRadioButton;
RadioButtonPola2: TRadioButton;
procedure ButtonAmbilCitraClick(Sender: TObject);
procedure ButtonAmbilCitra2Click(Sender: TObject);
procedure Olah;
procedure ButtonBlendingClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormUtama: TFormUtama;

implementation

uses UnitCitra;

var
FormCitra2, FormHasil: TFormCitra;

{$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 + ')';
end;
end;
procedure TFormUtama.ButtonAmbilCitra2Click(Sender: TObject);
begin
if (FormCitra = nil) then
begin
ShowMessage('Ambil citra pertama dulu');
exit;
end;
if (OpenPictureDialog.Execute) then
begin
if (FormCitra2 = nil) then
Application.CreateForm(TFormCitra, FormCitra2);
FormCitra2.Image.Picture.LoadFromFile(
OpenPictureDialog.FileName);
FormCitra2.ClientHeight :=
FormCitra2.Image.Picture.Height;
FormCitra2.ClientWidth :=
FormCitra2.Image.Picture.Width;
FormCitra2.ClientHeight :=
FormCitra2.Image.Picture.Height;
FormCitra2.Caption := 'Citra 2';
FormCitra2.Top := FormCitra.Top;
FormCitra2.Left := FormCitra.Left+FormCitra.Width;
end;
end;

procedure TFormUtama.Olah;
var
i, j, w, h: integer;
w1, w2: real;
PC, PC2, PH: PByteArray;
begin
w := FormCitra.Image.Picture.Width;
h := FormCitra.Image.Picture.Height;
if (FormCitra.Image.Picture.Bitmap.PixelFormat = pf8bit)
then
for i:= 0 to h-1 do
begin
PC := FormCitra.Image.Picture.BitMap.ScanLine[i];
PC2 := FormCitra2.Image.Picture.BitMap.ScanLine[i];
PH := FormHasil.Image.Picture.BitMap.ScanLine[i];
for j:= 0 to w-1 do
begin
if (RadioButtonPola1.Checked) then
begin
w1:=Sqrt((i-h/2)*(i-h/2)+(j-w/2)*(j-w/2))/100;
if (w1 > 1) then
w1 := 1;
end;
if (RadioButtonPola2.Checked) then
begin
if (Sqrt((i-h/2)*(i-h/2)+(j-w/2)*(j-w/2))<50)
then
w1 := 0.20
else
w1 := 0.80;
end;
w2 := 1-w1;
PH[j] := Round(PC[j]*w1+PC2[j]*w2);
end;
end;
if (FormCitra.Image.Picture.Bitmap.PixelFormat = pf24bit)
then
for i:= 0 to h-1 do
begin
PC := FormCitra.Image.Picture.BitMap.ScanLine[i];
PC2 := FormCitra2.Image.Picture.BitMap.ScanLine[i];
PH := FormHasil.Image.Picture.BitMap.ScanLine[i];
for j:= 0 to w-1 do
begin
if (RadioButtonPola1.Checked) then
begin
w1:=Sqrt((i-h/2)*(i-h/2)+(j-w/2)*(j-w/2))/100;
if (w1 > 1) then
w1 := 1;
end;
if (RadioButtonPola2.Checked) then
begin
if (Sqrt((i-h/2)*(i-h/2)+(j-w/2)*(j-w/2))<50)
then
w1 := 0.20
else
w1 := 0.80;
end;
w2 := 1-w1;
PH[3*j] := Round(PC[3*j]*w1+PC2[3*j]*w2);
PH[3*j+1] := Round(PC[3*j+1]*w1+PC2[3*j+1]*w2);
PH[3*j+2] := Round(PC[3*j+2]*w1+PC2[3*j+2]*w2);
end
end;
end;

procedure TFormUtama.ButtonBlendingClick(Sender: TObject);


begin
if (FormCitra2 = nil) then
begin
ShowMessage('Ambil citra pertama dulu');
exit;
end;
if (FormHasil = nil) then
Application.CreateForm(TFormCitra, FormHasil);
FormHasil.Caption := '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 := FormCitra2.Top;
FormHasil.Left := FormCitra2.Left+FormCitra.Width;
Olah;
FormHasil.Repaint;
end;

end.

Das könnte Ihnen auch gefallen