1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| procedure TForm1.Button2Click(Sender: TObject);
var
bm1,bm2: TBitmap;
lii: TLazIntfImage; // uses IntfGraphics
begin
if not opd.Execute then exit;
bm1 := TBitmap.Create; // création source
bm1.LoadFromFile(opd.FileName); // chargement source
ShowMessage(StringReplace(bm1.RawImage.Description.AsString, ' ', LineEnding, [rfReplaceAll]));
// BitsPerPixel=24 <-- forcé à 24 par le LoadFromFile, sinon 32
lii := bm1.CreateIntfImage; // 2 lignes rajoutées pour voir ce que ça donnerait
bm1.LoadFromIntfImage(lii); // mais elles ne servent à rien pour ce pb, si ce n'est à repasser PixelFormat à 32
ShowMessage(StringReplace(bm1.RawImage.Description.AsString, ' ', LineEnding, [rfReplaceAll]));
// BitsPerPixel=32
bm2 := TBitmap.Create; // création destination
bm2.Width := 200;
bm2.Height:= 150;
bm2.LoadFromFile(opd.FileName); // rajouté, lire pourquoi dessous
ShowMessage(StringReplace(bm2.RawImage.Description.AsString, ' ', LineEnding, [rfReplaceAll]));
// BitsPerPixel=32 et 24 si je rajoute LoadFromFile,
// et là, enfin, l'image est dans le fichier !
// mais pas à la bonne taille, ce qui est normal à ce niveau
bm2.FreeImage; // 3 lignes rajoutées --> servent à rien, taille non changée dans le fichier alors que dimensions OK dans ShowMessage dessous
bm2.Width := 200;
bm2.Height:= 150;
ShowMessage(StringReplace(bm2.RawImage.Description.AsString, ' ', LineEnding, [rfReplaceAll]));
// BitsPerPixel=24 Width=200 Height=150
if
StretchBmp(bm1,bm2, 200,150) // redimensionnement
then begin
image1.Picture.Bitmap.Assign(bm2); // affichage parfait
bm2.SaveToFile('/chemin/Blt__oeil.bmp'); // toujours pas à la bonne taille (c'est celle du fic d'origine) alors que
ShowMessage(StringReplace(bm2.RawImage.Description.AsString, ' ', LineEnding, [rfReplaceAll]));
// BitsPerPixel=24 Width=155 Height=150
// Width à 155 c'est la bonne valeur par rapport à Height à 150 donc le StretchBlt a fait son taf !
// on dirait que bm2.SaveToFile sauvegarde l'image chargée au LoadFromFile
// et ne tient donc pas compte du FreeImage...
image1.Picture.Bitmap.SaveToFile('/chemin/Blt_img_oeil.bmp'); // toujours trop grand alors que l'affichage est correct
end;
if // pour contrôle, et ça, c'est toujours tout bon
Scaled_Bmp(bm1,bm2, 200,150)
then begin
image2.Picture.Bitmap.Assign(bm2);
bm2.SaveToFile('/chemin/Draw_oeil.bmp');
end;
bm2.Free;
lii.Free;
bm1.Free;
end; |
Partager