Title: Load a JPG in a TImage, preserving the aspect ratio
Question: Load a JPG preservind the original aspect ratio of the JPG.
Answer:
procedure TForm1.Button1Click(Sender: TObject);
procedure CargaJPGProporcionado( Fichero: string;
const QueImage: TImage);
var
ElJPG : TJpegImage;
Rectangulo : TRect;
EscalaX,
EscalaY,
Escala : Single;
begin
ElJPG:=TJPegImage.Create;
try
ElJPG.LoadFromFile( Fichero );
//Por defecto, escala 1:1
EscalaX := 1.0;
EscalaY := 1.0;
//Hallamos la escala de reduccin Horizontal
if QueImage.Width ElJPG.Width then
EscalaX := QueImage.Width / ElJPG.Width;
//La escala vertical
if QueImage.Height ElJPG.Height then
EscalaY := QueImage.Height / ElJPG.Height;
//Escogemos la menor de las 2
if EscalaY EscalaX then Escala:=EscalaY else Escala:=EscalaX;
//Y la usamos para reducir el rectangulo destino
with Rectangulo do begin
Right:=Trunc(ElJPG.Width * Escala);
Bottom:=Trunc(ElJPG.Height * Escala);
Left:=0;
Top:=0;
end;
//Dibujamos el bitmap con el nuevo tamao en el TImage destino
with QueImage.Picture.Bitmap do begin
Width := Rectangulo.Right;
Height := Rectangulo.Bottom;
Canvas.StretchDraw( Rectangulo,ElJPG );
end;
finally
ElJPG.Free;
end;
end; {De CargaJPGProporcionado}
begin
CargaJPGProporcionado ('UnaFoto.jpg',Image1);
end;