PDA

Ver la Versión Completa : adaptar foto de marco a una imagen


kapullok_2006
01-09-2007, 17:02:55
hola,lo que deseo hacer es poner la foto de un marco de un cuadro, y esta que esté superpuesta por una imagen.Lo he hecho poniendo 2 componentes
TImage,pero no queda bien.¿Algun apoyo de cómo hacer que el tamaño de un marco se encaje bien al tamaño de cualquier foto del tamaño que sea?

Saludos.

ArdiIIa
01-09-2007, 18:12:59
hola,lo que deseo hacer es poner la foto de un marco de un cuadro, y esta que esté superpuesta por una imagen.Lo he hecho poniendo 2 componentes
TImage,pero no queda bien.¿Algun apoyo de cómo hacer que el tamaño de un marco se encaje bien al tamaño de cualquier foto del tamaño que sea?

Saludos.


Hola kapullok_2006 Veo que esta pregunta ya la has formulado en diversas ocasiones y al parecer las respuestas que obtuviste no fueron de tu satisfacción.

También he comprobado que has abierto mas de un hilo con el mismo asunto, y que fuieste digamos "amonestado (http://www.clubdelphi.com/foros/showthread.php?t=43045)" por un moderador.

Así que de entrada, si no lo han hecho ya, te voy a recomendar que leas la Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Como veo que eres una persona muy interesada en el tratamiento de imágenes, te voy a remitir a la que yo creo que es un lugar de referencia en el mundo de Delphi, en lo concerniente a algoritmos y tratamientos gráficos, y mas concretamente a un link, donde seguramente encuentres solución a lo que estás buscando. Así que espero que te sea de utilidad, y de este modo, no tendrás que repetir la misma pregunta varias veces.

Un Saludo.

LINK (http://www.efg2.com/Lab/ImageProcessing/Feathering.htm)

paldave
01-09-2007, 19:42:40
Hola, como veo que no han respondido a tu pregunta intentaré hacerlo.
La forma más sencilla que veo es que uses las propiedades del canvas de un TImage.
La cosa sería así:
1) Creas 2 TPicture con la imágen del marco en uno y la de la foto en el otro.
2) Creas un TImage en tu form.
3) Usando los métodos StretchDraw y Draw del canvas del TImage dibujas primero el marco de forma que ocupe todo el TImage y luego dibujas sobre el centrada la foto.
Sería algo así:
procedure TForm1.FormCreate(Sender: TObject);
var Picture1,Picture2:TPicture;
begin
Picture1:=TPicture.Create;
Picture1.Bitmap.LoadFromFile('D:\Seguridad\Imágenes\Marco.bmp');
Picture2:=TPicture.Create;
Picture2.Bitmap.LoadFromFile('D:\Seguridad\Imágenes\Foto.bmp');
Image1.Canvas.StretchDraw(Image1.ClientRect,Picture1.Graphic);
//acá se dibuja la foto centrada, puedes modificar las coordenadas para ponerla donde tu quieras
Image1.Canvas.Draw((Image1.Width div 2)-(Picture2.Width div 2),(Image1.Height div 2)-(Picture2.Height div 2),Picture2.Graphic);
Picture1.Free;
Picture2.Free;
end;

ArdiIIa
01-09-2007, 20:02:13
Hola, como veo que no han respondido a tu pregunta intentaré hacerlo.
No se si estamos leyendo el mismo foro, o como interpretar este comentario. :eek:

kapullok_2006
03-09-2007, 16:07:08
gracias a las personas que me habeis respondido.Intentaré hacer lo que pueda.

Saludos.

kapullok_2006
03-09-2007, 16:54:18
Hola. He escrito el código que me dijiste,pero no me aparece la foto del marco.Pues esto es lo que ocurre:
aparece la foto,pero sólo un trozo de ella y no entera,y no aparece superpuesta a la foto del marco.

Saludos.

paldave
04-09-2007, 17:39:14
Lo que pasa es que la foto que usas es más grande que el marco y más grande que el TImage que usas. Para solucionar este problema puedes redimensionar también la foto (además del marco) para que se ajusten ambos.
Sería algo así:
procedure TForm1.FormCreate(Sender: TObject);
var
Picture1,Picture2:TPicture;
const
AnchoVerticalMarco:Integer = 5;
AnchoHorizontalMarco:Integer=5;
begin
Picture1:=TPicture.Create;
Picture1.Bitmap.LoadFromFile('D:\Seguridad\Imágenes\Esfera reloj.bmp');
Picture2:=TPicture.Create;
Picture2.Bitmap.LoadFromFile('D:\Seguridad\Imágenes\yo.bmp');
Image1.Canvas.StretchDraw(Image1.ClientRect,Picture1.Graphic);
Image1.Canvas.StretchDraw(Rect(AnchoHorizontalMarco,AnchoVerticalMarco,Image1.Width - AnchoHorizontalMarco,Image1.Height -AnchoVerticalMarco),Picture2.Graphic);
Picture1.Free;
Picture2.Free;
end;
donde AnchoHorizontalMarco es el ancho del marco en sus bordes superior e inferior, y AnchoVerticalMarco es el ancho del marco en sus bordes laterales.