Professional Documents
Culture Documents
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;
ScrollBarAmbangAtas: TScrollBar;
Label1: TLabel;
EditAmbangAtas: TEdit;
Label2: TLabel;
ScrollBarAmbangBawah: TScrollBar;
EditAmbangBawah: TEdit;
procedure ButtonAmbilCitraClick(Sender: TObject);
procedure Olah;
procedure ScrollBarAmbangAtasChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormUtama: TFormUtama;
implementation
var
FormHasil: TFormCitra;
FormHistHasil: TFormHist;
{$R *.dfm}
procedure TFormUtama.Olah;
var
i, j, AmbangBawah, AmbangAtas, gray: integer;
PC, PH: PByteArray;
begin
AmbangBawah := ScrollBarAmbangBawah.Position;
AmbangAtas := ScrollBarAmbangAtas.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]>AmbangBawah) and (PC[j]<AmbangAtas))
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>AmbangBawah) and (gray<AmbangAtas))
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+AmbangBawah, 10);
FormHist.Canvas.LineTo(10+AmbangBawah,
FormHist.ClientHeight-10);
FormHist.Canvas.Pen.Color := clTeal;
FormHist.Canvas.MoveTo(10+AmbangAtas, 10);
FormHist.Canvas.LineTo(10+AmbangAtas,
FormHist.ClientHeight-10);
end;
end.