Cette fois-ci, il s'agit de redimensionner une image jpeg pour obtenir une nouvelle image jpeg. Cette dernière pourra être utilisée pour :
- affichée dans un contrôle TImage
- être sauvegardée avec ses nouvelles dimensions, pour créer des vignettes par exemple.
Paramètres :
srcJpeg : image source contenant l'image à redimensionner
destJpeg : image redimensionnée
MaxSize : dimension maximale (hauteur ou largeur) déterminée en fonction du cadrage de l'image d'origine.
Source / Exemple :
procedure ResizeJpeg(srcJpeg, destJpeg: TJpegImage; const MaxSize: integer);
var
Bitmap: TBitmap;
Ratio: double;
begin
{Si l'image est vide ou la largeur est nulle, sortir}
if (srcJpeg.Empty) or (MaxSize <= 0) then
Exit;
{ Création d'un TBitmap le temps de redimensionner l'image }
Bitmap := TBitmap.Create;
try
{ Détermination du cadrage Vertical ou horizontal}
Ratio := srcJpeg.Height / srcJpeg.Width;
if Ratio > 1 then
//Cadrage vertical
Bitmap.Width := Round(MaxSize / Ratio)
else
//cadrage horizontal
Bitmap.Width := MaxSize;
Bitmap.Height := Round(Bitmap.Width * Ratio);
//Copie de l'image avec redimensionnement sur le canvas du TBitmap
Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect, srcJpeg);
{Il ne reste plus qu'à copier l'image redimensionnée dan le Jpeg
à retourner}
destJpeg.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;
//exemple d'utilisation
procedure TUseBlobsDemoForm.btnLoadImageClick(Sender: TObject);
var
JpegStream: TStream;
Jpeg, JpegTemp: TJpegImage;
begin
if OpenPictureDialog1.Execute then
begin
ImgExt := UpperCase(ExtractFileExt(OpenPictureDialog1.FileName));
if (ImgExt = '.JPG') or (ImgExt = '.JPEG') then
begin
JpegTemp := TJpegImage.Create;
try
Jpeg := TJpegImage.Create;
try
//charger l'image
Jpeg.LoadFromFile(OpenPictureDialog1.FileName);
// la redimensionner
ResizeJpeg( Jpeg, JpegTemp, ImgMaxWidth);
// l'affecter au contrôle visuel
Image1.Picture.Assign(JpegTemp);
finally
Jpeg.Free;
end;
finally
JpegTemp.Free;
end;
end;
// afficher les dimensions de la nouvelle image
with Image1 do
lblImage.Caption := Format('Image : %d x %d (Hxl)',[Picture.Height, Picture.Width]);
end;
end;
Conclusion :
Explications :
On commence par vérifier que l'image source n'est pas vide et que la dimension maximale n'est pas nulle ou négative.
Ensuite on crée un bitmap, on détermine le cadrage de srcJpeg (ratio). En fonction de ce cadrage, on détermine les dimensions et l'orientation du bitmap.
Après, on étire (StretchDraw) l'image contenue dans srcJpeg pour la faire tenir sur la surface de dessin (Canvas.ClipRect) du bitmap temporaire.
Pour finir, on copie l'image du bitmap temporaire dans l'image JPeg de destination avant de libérer les ressources allouées à Bitmap.
Pour afficher l'image dans un contrôle TImage, s'inspirer de l'exemple ci-dessus.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.