Delphi 2009 est livré avec un support intégré pour JPEG, BMP, GIF et PNG.
Pour les versions antérieures de Delphi, vous devrez peut-être trouver des implémentations de tiers pour PNG et GIF, mais dans Delphi 2009 vous suffit d'ajouter les Jpeg
, pngimage
et GIFImg
unités à votre clause uses.
Si le fichier a une extension, vous pouvez utiliser le code suivant, comme indiqué par d'autres TPicture.LoadFromFile examine les extensions enregistrées par les classes héritées pour déterminer quelle image charger.
uses
Graphics, Jpeg, pngimage, GIFImg;
procedure TForm1.Button1Click(Sender: TObject);
var
Picture: TPicture;
Bitmap: TBitmap;
begin
Picture := TPicture.Create;
try
Picture.LoadFromFile('C:\imagedata.dat');
Bitmap := TBitmap.Create;
try
Bitmap.Width := Picture.Width;
Bitmap.Height := Picture.Height;
Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
Bitmap.SaveToFile('C:\test.bmp');
finally
Bitmap.Free;
end;
finally
Picture.Free;
end;
end;
Si l'extension de fichier n'est pas connue, une méthode consiste à regarder les premiers octets pour déterminer le type d'image.
procedure DetectImage(const InputFileName: string; BM: TBitmap);
var
FS: TFileStream;
FirstBytes: AnsiString;
Graphic: TGraphic;
begin
Graphic := nil;
FS := TFileStream.Create(InputFileName, fmOpenRead);
try
SetLength(FirstBytes, 8);
FS.Read(FirstBytes[1], 8);
if Copy(FirstBytes, 1, 2) = 'BM' then
begin
Graphic := TBitmap.Create;
end else
if FirstBytes = #137'PNG'#13#10#26#10 then
begin
Graphic := TPngImage.Create;
end else
if Copy(FirstBytes, 1, 3) = 'GIF' then
begin
Graphic := TGIFImage.Create;
end else
if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
begin
Graphic := TJPEGImage.Create;
end;
if Assigned(Graphic) then
begin
try
FS.Seek(0, soFromBeginning);
Graphic.LoadFromStream(FS);
BM.Assign(Graphic);
except
end;
Graphic.Free;
end;
finally
FS.Free;
end;
end;
FYI - Juste essayé ceci. Cela a fonctionné pour les JPG mais pas pour les PNG. –