Delphi 2009 verfügt über eine integrierte Unterstützung für JPEG, BMP, GIF und PNG.
Für frühere Versionen von Delphi müssen Sie möglicherweise Implementierungen von Drittanbietern für PNG und GIF finden, aber in Delphi 2009 fügen Sie einfach die Jpeg
, pngimage
y GIFImg
Einheiten zu Ihrer Verwendungs-Klausel.
Wenn die Datei eine Erweiterung hat, können Sie den folgenden Code verwenden. Wie bereits von anderen erwähnt, prüft TPicture.LoadFromFile die von den geerbten Klassen registrierten Erweiterungen, um das zu ladende Bild zu bestimmen.
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;
Wenn die Dateierweiterung nicht bekannt ist, besteht eine Methode darin, anhand der ersten Bytes den Bildtyp zu bestimmen.
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;