Moin,
Gibt es eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp enthalten ist.
ShortStory: ich benutze von Gaussi(Danke dafür) seine Mp3FileUtils. Ich lese damit ua. das hinterlegte Picture ein.
Doch kann mittlerweile nicht nur JPG sondern auch PNG hinterlegt werden.
Also muß ich bevor (Part2 Picture anzeigen) herausfinden ob ein JPG oder PNG hinterlegt ist.
Bei dem nachfolgendem Beispiel wird nur JPG akzeptiert bei PNG erfolgt klarerweise eine "ExceptionMessage="JPEG-Fehler #53".
Hat jemand einen Tipp wie ich hier weiterkomme?
Delphi-Quellcode:
type
ImageMP3: TImage;
var
PictureData: TStream;
jp: TJPEGImage;
begin
PictureData := TMemoryStream.Create;
Id3v2Tag.GetPicture(PictureData, '*');
// Part2 Picture anzeigen
try
PictureData.Seek(0, soFromBeginning);
jp := TJPEGImage.Create;
try
try
jp.LoadFromStream(PictureData);
jp.DIBNeeded;
ImageMP3.Picture.Bitmap.Assign(jp);
except
ImageMP3.Picture.Assign(NIL);
end;
finally
jp.Free;
end;
finally
PictureData.Free;
end;
end;
Ergänzung bei einem File ermittle ich den Filetyp so (Beispiel):
Delphi-Quellcode:
function TForm1.GetGraphTyp(const AFileName: String): String;
var
FileHandle: Integer;
Buffer: Word;
begin
{ Buffer:
GIF = 18759
PNG = 20617
JPG = 55551
BMP = 19778
ICO = 0 }
FileHandle := FileOpen(AFileName, fmOpenRead);
FileSeek(FileHandle, 0, 0);
FileRead(FileHandle, Buffer, 2);
FileClose(FileHandle);
CodeSite.Send(' Buffer: ', Buffer);
case Buffer of
18759:
Result := 'GIF';
20617:
Result := 'PNG';
55551:
Result := 'JPG';
19778:
Result := 'BMP';
0:
Result := 'Unbekannt';
end;
CodeSite.Send(' Result: ', Result);
end;