PDA

Ver la Versión Completa : Guardad Canvas De Un Image Con La propiedad stretch:=true


gulder
28-11-2008, 07:32:23
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:



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
http://img.tomatone.net/big/120px-Nuvola_apps_kcmkwm.png

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

http://img.tomatone.net/big/lopoliiiii.PNG

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

http://img.tomatone.net/big/logulaffffffffffff.PNG

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 (http://www.clubdelphi.com/foros/showpost.php?p=292172&postcount=11) 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.

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

http://img.tomatone.net/big/logula2.PNG

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 (http://www.clubdelphi.com/foros/showpost.php?p=292172&postcount=11):

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
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

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


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


asi quedo entonce saludos

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