cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 2009
-
9 mai 2007 à 19:50
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015
-
10 mai 2007 à 20:13
Bonsoir à tous,
Est t'il possible avec un composant TopenDialog de charger un fichier en Bmp ou Jpg et de lui donner une largeur et hauteur définie qui sera toujours la même par exemple H700xlargeur450 malgré que ces fichiers ont une autre dimension avant le chargement.
Le composant récepteur est un Timage et malgré la propriété Strech à true, cela ne fonctionne pas.
{ ouverture d'une image }
if OpenDialog1.Execute then
begin
{ recuperation de l'extention }
Ext := LowerCase(ExtractFileExt(OpenDialog1.FileName));
{ creation du bitmap temporaire }
BMP := TBitmap.Create;
try
{ si c'est un jpeg } if (ext '.jpg') or (ext'.jpeg') then
begin
{ creation d'une image jpeg }
JPG := TJPegImage.Create;
try
{ charge a partir du fichier }
JPG.LoadFromFile(OpenDialog1.FileName);
{ convertion JPG > BMP }
JPEGToBMP(JPG,BMP);
{ BMP est prét }
BMPLoaded := true;
finally
{ liberation de JPG }
JPG.Free;
end;
end
else
{ si c'est un bitmap }
if ext = '.bmp' then
begin
{ charge a partir du fichier }
BMP.LoadFromFile(OpenDialog1.FileName);
{ BMP est prét }
BMPLoaded := true;
end;
{ si BMP est prét }
if BMPLoaded then
begin
{ selon les options de conservation du rapport H/L ou L/H }
case RadioGroup1.ItemIndex of
1 : begin { on garde le rapport H/L, exp : 480/640 = 0.75 }
NewW := 700;
NewH := round(NewW * (BMP.Height / BMP.Width));
end;
2 : begin { on garde le rapport L/H, exp : 640/480 = 1.33 }
NewH := 450;
NewW := round(NewH * (BMP.Width / BMP.Height));
end;
else
begin { on ne conserve pas le rapport de dimension }
NewW := 700;
NewH := 450;
end;
end;
{ enfin on vas injecter BMP dans le bitmap de Image1 (autosize = true) }
with Image1.Picture.Bitmap do
begin
{ on definit les nouvelles dimensions }
width := NewW;
height := NewH;
{ on travail en couleurs 24bpc }
pixelformat := pf24bit;
{ on sauvegarde l'ancien mode de redimension du canvas }
OldSBM := GetStretchBltMode(Canvas.Handle);
{ et on le definit en mode HALFTONE }
SetStretchBltMode(Canvas.Handle, HALFTONE);
{ on restaure le mode de redimensionnement du canvas }
SetStretchBltMode(Canvas.Handle, OldSBM);
end;
end;
finally
{ on libere BMP }
BMP.Free;
end;
{ on rafraichi Image1 }
Image1.Refresh;
end;
end;
Le composant TOpenDialog est juste une "form" pour sélectionner un fichier existant.
Cela n'a rien avoir avec une image quelque soit son format.
Il t'est possible de sélectionner une image via un TOpenDialog et de réaliser un redimensionnement : voir le source de delphiprog sur ce site (admin CS : voir onglet correspondant).
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 10 mai 2007 à 16:58
de rien CinCap, la manipulation d'image a toujours été une tache assé ardue et presque inaccessible au debutants.
et comme il est assé difficile de trouver de bonnes solutions dans les sources CS vaux mieux donner un bout de code.