Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Exclamation Novato (Redimensionar imagen)

Saludos!!!

tengo un problema, usos paradox 7 y delphi 7, en mi aplicacion cargo imagenes jpeg en un timage y todo funciona perfecto se carga y se muestra, pero que la imagen se muestra mas grande que el tamaño del timage, como hago para que la imagen tenga el mismo tamaño del TImage? aqui os dejo mi codigo para cargar imagen:

Código Delphi [-]
procedure TForm3.mnuLoadClick(Sender: TObject);
var
    Jpg: TJpegImage;
    Stream: TMemoryStream;
    FileExt: string;
    GraphType: TGraphType;
  begin
    if dlgOpenPicture.Execute then begin
      Jpg := nil;
      Stream := nil;
      try
        Stream := TMemoryStream.Create;
        FileExt := LowerCase(ExtractFileExt(dlgOpenPicture.FileName));
        if (FileExt = '.bmp') or (FileExt = '.dib') then begin
          GraphType := gtBitmap;
          Stream.Write(GraphType, 1);
          with Image1.Picture.Bitmap do begin
            LoadFromFile(dlgOpenPicture.FileName);
            Image1.Picture.Bitmap.SaveToStream(Stream);
          end;
        end else if (FileExt = '.ico') then begin
          GraphType := gtIcon;
          Stream.Write(GraphType, 1);
          with Image1.Picture.Icon do begin
            LoadFromFile(dlgOpenPicture.FileName);
            Image1.Picture.Bitmap.SaveToStream(Stream);
          end;
        end else if (FileExt = '.emf') or (FileExt = '.wmf') then begin
          GraphType := gtMetafile;
          Stream.Write(GraphType, 1);
          with Image1.Picture.Metafile do begin
            LoadFromFile(dlgOpenPicture.FileName);
            Image1.Picture.Bitmap.SaveToStream(Stream);
          end;
        end else if (FileExt = '.jpg') or (FileExt = '.jpeg')
           or (FileExt = '.jpe') then begin
          Jpg := TJpegImage.Create;
          Jpg.LoadFromFile(dlgOpenPicture.FileName);
          Image1.Picture.Assign(Jpg);
          GraphType := gtJpeg;
          Stream.Write(GraphType, 1);
          Jpg.SaveToStream(Stream);
        end;
        if (tblPeliculas.State <> dsEdit) and (tblPeliculas.State <> dsInsert) then
          tblPeliculas.Edit;
        Stream.Position := 0;
        TBlobField(tblPeliculas.FieldByName('Imagen')).LoadFromStream(Stream);
      except
        jpg.Free;
        Stream.Free;
        raise;
      end;
      jpg.Free;
      Stream.Free;
    end;
end;

espero que me puedan ayudar y hayan podido entender mi duda.

gracias!!!!

Última edición por dec fecha: 05-06-2006 a las 21:18:31.
Responder Con Cita
  #2  
Antiguo 05-06-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Pues no entiendo si quieres redimensionar la imagen, o que la imagen se ajuste al Timage.

Para lo segundo usa image.strech:=true;
Y si tambien quieres que quede proporcional, image.proportional:=true;

Por cierto, usa las etiquetas para codigo delphi.

Y me parece que le das muchas vueltas para cargar una imagen, no te sirve imagen.loadfromfile(archivo)??
Es tan importante soportar tantos formatos distintos?? Para mi, los que abre un TImage con loadfromfile son más que suficientes.

Si quieres redimensionar la imagen, el tema es más largo, pero los pasos son:
1.- Pasar el jpg a bmp
2.- Redimensiona el bmp (hay cantidad de funciones)
3.- Pasa de bmp a jpg y guarda el archivo.

Saludos
Responder Con Cita
  #3  
Antiguo 05-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Bien antes de nada, creo que le das muchas vueltas, con algo asi creo que obtendriamos el mismo resultado:

Código Delphi [-]
var
  GraphType: TGraphType;
  Stream: TMemoryStream;
begin
  if dlgOpenPicture.Execute then
    with Image1.Picture do
    begin
      LoadFromFile(dlgOpenPicture.FileName);
      if Graphic is TBitmap then GraphType:= gtBitmap else
      if Graphic is TIcon then GraphType:= gtIcon else
      if Graphic is TMetafile then GraphType:= gtMetafile else
      if Graphic is TJPEGImage then GraphType:= gtJpeg;
      Stream:= TMemoryStream.Create;
      try
        Stream.WriteBuffer(GraphType, 1);
        Graphic.SaveToStream(Stream);
        // Aqui lo de la base de datos
        {
        if (tblPeliculas.State <> dsEdit) and (tblPeliculas.State <> dsInsert) then
          tblPeliculas.Edit;
        Stream.Position := 0;
        TBlobField(tblPeliculas.FieldByName('Imagen')).LoadFromStream(Stream);
        }
      finally
        Stream.Free;
      end;
    end;
end;

Ahora volvamos al tema de tu pregunta, si lo que quieres es que a la hora de mostrar la imagen esta se ajuste al tamaño del TImage echale un vistzao en la ayuda a las propiedades Stretch y Proportional del TImage que creo pueden darte el efecto que buscas.

Si por el contrario quieres redimensionar la imagen puedes usar alguan de estas funciones que ya describi en un hilo anterior:

Código Delphi [-]
// Esta cambia el alto y ancho, estirando la imagen si es necesario
procedure Redimensionar(Imagen: TGraphic; Ancho, Alto: Integer);
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try
    Bitmap.Width:= Ancho;
    Bitmap.Height:= Alto;
    Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect,Imagen);
    Imagen.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;

// Esta otra mantiene la relacion entre alto y ancho
procedure Proporcional(Imagen: TGraphic; Ancho, Alto: Integer);
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try
    if  (Ancho/Imagen.Width) < (Alto/Imagen.Height) then
      Alto:= Trunc((Ancho*Imagen.Height)/Imagen.Width)
    else
      Ancho:= Trunc((Imagen.Width*Alto)/Imagen.Height);
    Bitmap.Width:= Ancho;
    Bitmap.Height:= Alto;
    Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect,Imagen);
    Imagen.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;

Combinando los dos codigos anteirores nos quedaria algo como esto:
Código Delphi [-]
var
  GraphType: TGraphType;
  Stream: TMemoryStream;
begin
  if dlgOpenPicture.Execute then
    with Image1.Picture do
    begin
      LoadFromFile(dlgOpenPicture.FileName);
      // Aqui puedes usar Proporcional o Redimensionar 
     Proporcional(Graphic,Image1.Width,Image1.Height);
      if Graphic is TBitmap then GraphType:= gtBitmap else
      if Graphic is TIcon then GraphType:= gtIcon else
      if Graphic is TMetafile then GraphType:= gtMetafile else
      if Graphic is TJPEGImage then GraphType:= gtJpeg;
      Stream:= TMemoryStream.Create;
      try
        Stream.WriteBuffer(GraphType, 1);
        Graphic.SaveToStream(Stream);
        // Aqui lo de la base de datos
        {
        if (tblPeliculas.State <> dsEdit) and (tblPeliculas.State <> dsInsert) then
          tblPeliculas.Edit;
        Stream.Position := 0;
        TBlobField(tblPeliculas.FieldByName('Imagen')).LoadFromStream(Stream);
        }
      finally
        Stream.Free;
      end;
    end;
end;

Ten en cuenta que este ultimo codigo si modifica el tamaño real de la imagen y la imagen se guardara con el tamaño cambiado
Responder Con Cita
  #4  
Antiguo 05-06-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Seoane, muy buenas las funciones que pones, no conocia StretchDraw!!

Te ahorras el paso de jpg a bmp. Y funciona con más tipos de imagenes, pero yo solo admito jpg y bmp, y al final, siempre convierto la imagen a jpg aplicando la compresión que me interese, ya que los usuarios a veces intentan cargar imagenes enormes o con minima compresión. Ahorro muchos bytes con este paso.

Saludos
Responder Con Cita
  #5  
Antiguo 05-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Lamentablemente no soportan tantos tipos de archivo, con wmf o ico no funciona, mas concretamente en esta sentencia:

Código Delphi [-]
Imagen.Assign(Bitmap);

Ya que no se puede asignar un Bitmap a un icono o un wmf. Si queremos usar este tipo de archivos tendriamos que guardar el resultado en jpg o bmp y no en el formato original.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Novato (Cargando imagen con jvDBImage) enecumene Conexión con bases de datos 4 05-06-2006 23:01:36
Redimensionar Imagen a tamaño del formulario! kye_z Varios 2 09-11-2004 10:44:16
Pregunta de novato.. pero de muy novato CFPA86 PHP 1 08-08-2004 07:53:42
Redimensionar imagen jpeg xflo Gráficos 0 01-07-2003 13:46:37
Redimensionar JPG xflo Lazarus, FreePascal, Kylix, etc. 0 01-07-2003 13:43:57


La franja horaria es GMT +2. Ahora son las 00:50:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi