unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtDlgs, ExtCtrls, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Archivo1: TMenuItem;
Abrir1: TMenuItem;
OPD1: TOpenPictureDialog;
StatusBar1: TStatusBar;
ScrollBox1: TScrollBox;
Image1: TImage;
Basicos1: TMenuItem;
Negativo1: TMenuItem;
StatusBar2: TStatusBar;
Label1: TLabel;
ProgressBar1: TProgressBar;
Grises1: TMenuItem;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ranformaciones1: TMenuItem;
raslacion1: TMenuItem;
Rotacion1: TMenuItem;
Escalacion1: TMenuItem;
Edit5: TEdit;
Label6: TLabel;
Label7: TLabel;
Edit6: TEdit;
procedure Abrir1Click(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Negativo1Click(Sender: TObject);
procedure Grises1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure raslacion1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
nomarch:string;
ancho, alto:integer;
X1,X2,Y1,Y2:integer;
implementation
{$R *.dfm}
procedure TForm1.Abrir1Click(Sender: TObject);
begin
if OPD1.Execute then begin
nomarch:=OPD1.FileName;
image1.Picture.LoadFromFile(nomarch);
ancho:=Image1.Width;
alto:=Image1.Height;
Edit1.Text:='0';
Edit2.Text:='0';
Edit3.Text:=IntToStr(ancho);
Edit4.Text:=IntToStr(alto);
StatusBar2.Panels[1].Text:=IntToStr(ancho);
StatusBar2.Panels[3].Text:=IntToStr(alto);
StatusBar2.Panels[4].Text:=nomarch;
end;
end;
procedure TForm1.Grises1Click(Sender: TObject);
var
pix,r,g,b,gris:integer;
i,j:integer;
begin
X1:=StrToInt(edit1.Text);
X2:=StrToInt(edit3.Text);
Y1:=StrToInt(edit2.Text);
Y2:=StrToInt(edit4.Text);
ProgressBar1.Max:=X2-X1;
for i := X1 to X2 do begin
for j := Y1 to Y2 do begin
pix:=Image1.Canvas.Pixels[i,j];
r:=pix and $FF;
g:=(pix and $FF00) shr 8;
b:=(pix and $FF0000) shr 16;
gris:=round((r+g+b)/3);
r:=gris;
g:=gris;
b:=gris;
pix:=r or (g shl 8) or (b shl 16);
Image1.Canvas.Pixels[i,j]:=pix;
end;
ProgressBar1.StepIt;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if RadioButton1.Checked then begin
Edit1.Text:=IntToStr(x);
Edit2.Text:=IntToStr(y);
end
else begin
Edit3.Text:=IntToStr(x);
Edit4.Text:=IntToStr(y);
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
pix,r,g,b:integer;
begin
pix:=Image1.Canvas.Pixels[x,y];
r:=pix and $FF;
g:=(pix and $FF00) shr 8;
b:=(pix and $FF0000) shr 16;
StatusBar1.Panels[1].Text:=IntToStr(X);
StatusBar1.Panels[3].Text:=IntToStr(Y);
StatusBar1.Panels[5].Text:=IntToStr(R);
StatusBar1.Panels[6].Text:=IntToStr(G);
StatusBar1.Panels[7].Text:=IntToStr(B);
end;
procedure TForm1.Negativo1Click(Sender: TObject);
var
pix,r,g,b:integer;
i,j:integer;
begin
X1:=StrToInt(edit1.Text);
X2:=StrToInt(edit3.Text);
Y1:=StrToInt(edit2.Text);
Y2:=StrToInt(edit4.Text);
ProgressBar1.Max:=X2-X1;
for i := X1 to X2 do begin
for j := Y1 to Y2 do begin
pix:=Image1.Canvas.Pixels[i,j];
r:=pix and $FF;
g:=(pix and $FF00) shr 8;
b:=(pix and $FF0000) shr 16;
r:=255-r;
g:=255-g;
b:=255-b;
pix:=r or (g shl 8) or (b shl 16);
Image1.Canvas.Pixels[i,j]:=pix;
end;
ProgressBar1.StepIt;
end;
end;
procedure TForm1.raslacion1Click(Sender: TObject);
var
pix,r,g,b,trasladar1,trasladar2,trasladar3,trasladar4:integer;
i,j,h,y:integer;
trasladarx,trasladary:integer;
begin
X1:=StrToInt(edit1.Text);
X2:=StrToInt(edit3.Text);
Y1:=StrToInt(edit2.Text);
Y2:=StrToInt(edit4.Text);
trasladarx:=StrToInt(edit5.Text);
trasladary:=StrToInt(edit6.Text);
ProgressBar1.Max:=X2-X1;
for i := X1 to X2 do begin
for j := Y1 to Y2 do begin
pix:=Image1.Canvas.Pixels[i,j];
Image1.Left:=Image1.Left + trasladarx;
Image1.Top:=Image1.Top + trasladary;
Image1.Canvas.Pixels[i,j]:=pix;
end;
ProgressBar1.StepIt;
end;
end;
end.