Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Guardad Canvas De Un Image Con La propiedad stretch:=true (https://www.clubdelphi.com/foros/showthread.php?t=61961)

gulder 28-11-2008 07:32:23

Guardad Canvas De Un Image Con La propiedad stretch:=true
 
Hola Foro Como andan espero que bien, bueno estoy tratando de guardar el canvas de un Timage que tiene la propiedad stretch:=true en una imagen lo hago de la siguiente forma:


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
begin
        Bitmap := TBitmap.Create;
        Bitmap.Width := Image1.Width;
        Bitmap.Height := Image1.Height;
        Bitmap.Canvas.Draw(0,0,Image1.Picture.Graphic);
        Bitmap.SaveToFile('logula.bmp');
end;


Nota: este es el tamaño original de la imagen antes de ser cargado en el Timage


en mi form tengo la imagen y el boton ojo el tamaño de la imagen no es el original recuerden que la imagen tiene la propiedad stretch:=true y por ende la estira al tamaño del Timage



y al ejecutar dicho codigo me lo guarda de la siguiente forma



yo quiero que me lo guarde tal cual se ve en el Timage saludos y espero que me entiendan lo que quiero

escafandra 28-11-2008 08:20:28

Trata de mirar si esto te ayuda. Esta en C++ pero es fácil de portar a delphi.

Saludos.

Neftali [Germán.Estévez] 28-11-2008 11:16:07

No se si es lo mismo, pero esto debería funcionar.
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  ORect, Drect: TRect;
  Bitmap: TBitmap;
begin
  ORect := Image1.Picture.Bitmap.Canvas.ClipRect;
  DRect := Image1.ClientRect;

  // Copia
  Bitmap := TBitmap.Create;
  Bitmap.Width := Image1.Width;
  Bitmap.Height := Image1.Height;
  Bitmap.Canvas.CopyRect(DRect,
                         Image1.Picture.Bitmap.Canvas,
                         ORect);
  Bitmap.SaveToFile('.\logula2.bmp');
  Bitmap.Free;
end;

gulder 28-11-2008 14:26:47

hola foristas como amanecen bueno primero Neftali el ejemplo que me pone me arroja lo siguiente solo una imagen en blanco no se que puede estar pasando



y por otro lado escafandra gracias por responder no he podido pasar ese codigo a delphi saludos

seoane 28-11-2008 14:32:26

¿la imagen es bmp o jpg?

gulder 28-11-2008 14:48:46

hola seoane como andas la imagen es PNG pero igual la converti a jpg y la cargue y sale lo mismo saludos

escafandra 28-11-2008 15:31:20

Prueba a ver si esto te sirve, es la traducción mas o menos de aquello:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);

 var
   R: TRect;
   Image: TImage;

begin
   Image := TImage.Create(Self);

   // Aquí dimensionamos la nueva imagen....
   Image.Height := 100;
   Image.Width  := 100;

   // Preparamos para la función StretchDraw
    R.Left := 0;
    R.Top := 0;
    R.Bottom := Image.Height;
    R.Right := Image.Width;

   // Copiamos la imagen cambiada de tamaño a Image desde Image1...
   // Image1 esta definida en tiempo de diseño....
   Image.Canvas.StretchDraw(R, Image1.Picture.Graphic);

   // La salvamos para ver que ha pasado. ....EURECA....
   Image.Picture.Graphic.SaveToFile('a.bmp');

end;

Saludos.

Neftali [Germán.Estévez] 28-11-2008 16:15:02

Cita:

Empezado por gulder (Mensaje 328579)
hola igual la converti a jpg y la cargue y sale lo mismo

Ese código funciona con Bitmaps (tal y como lo estabas guardando); Para jpg tal vez haya que convertirlo antes.

Lepe 28-11-2008 16:19:51

Si quieres que delphi reconozca bmp, jpg, png, tiff, etc, te aconsejo la biblioteca de funciones GraphicEx, sólo añades el "uses GraphicEx" y ya puedes leer muchos tipos de imágenes.

Saludos

gulder 28-11-2008 16:26:03

escafandra hola como estas espero que bien lo logre pero modificando esto

Código Delphi [-]
   // Aquí dimensionamos la nueva imagen....
   Image.Height := 100;
   Image.Width  := 100;

Código Delphi [-]
  // Aquí dimensionamos la nueva imagen....
   Image.Height :=  Image1.Height;
   Image.Width  :=  Image1.Width;


asi quedo entonce saludos

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);

 var
   R: TRect;
   Image: TImage;

begin
   Image := TImage.Create(Self);

   // Aquí dimensionamos la nueva imagen....
   Image.Height :=  Image1.Height;
   Image.Width  :=  Image1.Width;

   // Preparamos para la función StretchDraw
    R.Left := 0;
    R.Top := 0;
    R.Bottom := Image.Height;
    R.Right := Image.Width;

   // Copiamos la imagen cambiada de tamaño a Image desde Image1...
   // Image1 esta definida en tiempo de diseño....
   Image.Canvas.StretchDraw(R, Image1.Picture.Graphic);

   // La salvamos para ver que ha pasado. ....EURECA....
   Image.Picture.Graphic.SaveToFile('a.bmp');

end;

saludos y gracias a clubdelphi chauuu


La franja horaria es GMT +2. Ahora son las 19:05:20.

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