PDA

Ver la Versión Completa : Ayuda Con tratamiento de imagen


steelha
13-09-2012, 18:55:02
Buenas, haber si me pueden ayudar no se si es tratamiento de imagen o algo parecido pero es lo siguiente. tengo una imagen necesito poder selecionar una parte de la imagen cualquiera y esa seleccion será mi nueva imagen, poder rotar, recotar parte que no quiera y dibujar puntos(color, circulo, raya, etc...) si pudieran darme una ayuda les agradecere

ecfisa
13-09-2012, 20:00:51
necesito poder selecionar una parte de la imagen cualquiera y esa seleccion será mi nueva imagen, poder rotar, recotar parte que no quiera y dibujar puntos(color, circulo, raya, etc...)

Hola.

Por favor steelha, realiza una pregunta por hilo. Lee el punto [ 8 (http://www.clubdelphi.com/foros/guiaestilo.php#preguntas) ] de la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Saludos y gracias por tu colaboración :)

ecfisa
13-09-2012, 21:31:18
Hola steelha.

Para tu primera pregunta,

necesito poder selecionar una parte de la imagen cualquiera y esa seleccion será mi nueva imagen

te hice un ejemplo muy sencillo para darte una idea de como podrías seleccionar con el mouse parte de una imágen (o toda) y copiar la selección en otra.

El ejemplo utiliza dos TImages y un TShape:

...
implementation

var
P: TPoint;
InSelect: Boolean = False;

procedure TForm1.FormCreate(Sender: TObject);
begin
Shape1.Pen.Color := clWhite;
Shape1.Pen.Style := psDot;
Shape1.Visible := False;
InSelect := False;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
P.X := X;
P.Y := Y;
InSelect := True;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
R: TRect;
begin
if InSelect then
begin
R := Rect(Image1.Left+P.X,Image1.Top+P.Y,Image1.Left+X,Image1.Top+Y);
Shape1.BoundsRect := R;
Shape1.Brush.Style := bsClear;
Shape1.Visible := True;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image2.Picture := nil;
Image2.Canvas.CopyRect(Rect(0,0,X-P.X,Y-P.Y),Image1.Canvas,Rect(P.X,P.Y,X,Y));
Shape1.Visible := False;
InSelect := False;
end;

...

El resto de tus consultas podés agregarlas en nuevos hilos en este mismo foro.

Saludos. :)

ecfisa
13-09-2012, 22:37:24
Hola.

Como en el ejemplo anterior sólo permitía trabajar con bmp, te amplio el código de pegado de la selección:

...
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
BM: TBitmap;
begin
Image2.Picture := nil;
BM := TBitmap.Create;
try
BM.Height := Image1.Picture.Height;
BM.Width := Image1.Picture.Width;
BM.Canvas.Draw(0,0,Image1.Picture.Graphic);
Image2.Canvas.CopyRect(Rect(0,0,X-P.X,Y-P.Y), BM.Canvas,Rect(P.X,P.Y,X,Y));
Shape1.Visible := False;
InSelect := False;
finally
BM.Free;
end;
end;


Saludos.

steelha
14-09-2012, 18:43:29
:) gracias ya lei y entendi el punto ocho. :p .
Muchas gracias por la ayuda.

steelha
14-09-2012, 19:19:47
Lo demás de dibujar sobre la imagen, ya encontré un hilo donde explica.

steelha
26-09-2012, 15:36:33
hola ecfisa, he copiado el codigo tal cual (con modificaciones solo de los nombre de los componentes), pero cuando selecciona la parte que quiero en la imagen principal se pone totalmente en blanco. si me puedes ayudar en esa parte te agradecere

ecfisa
26-09-2012, 19:28:12
Hola steelha.

No se por que te puede estar sucediendo eso, acabo de realizar otra prueba y en ningún momento me pone en blanco la imágen orígen.
Por si te sirve de ayuda te adjunto el código de la prueba para que puedas cotejarlo con el tuyo.

Saludos.