Pages

brightness dengan menggunakan delphi

coding untuk brightness dengan menggunakan delphi dan ini masih berkaitan dengan yang kemarin dalam histogram....

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.



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.

untuk hasilnya.....dari coding diatas....



0 komentar:

Posting Komentar