Documente Academic
Documente Profesional
Documente Cultură
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
var
FormHasil: TFormCitra;
FormHistHasil: TFormHist;
{$R *.dfm}
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;
end.