In meinem Texturenloader für OpenGL mache ich genau das. Ich habe nämlich keinen Dateinamen. Du musst die Datei öffnen und ließt 2 Bytes aus.
BMP: BM
JPG: $FF und $D8
Allerdings nützt dir das so jetzt auch nicht viel, da du diese Information nicht an das TImage weitergeben kannst. Die Datei umzubennen wäre wohl nicht so praktisch. Aber du könntest entsprechend ein TBitmap oder ein TJPEGImage erstellen und dann mittels LoadFromStream das Bild aus dem Stream lesen aus dem du die zwei bytes gelesen hast. Dieses Bild kannst du dann mit Image.Picture.Assign() auf ein TImage zuweisen. Aber vorsicht. Du musst die Position des Stream zurücksetzen.
Das ist ein gekürztes Stück aus meinem Loader. Das Prinzip ist bei einem TBitmap haar genau das Selbe.
Delphi-Quelltext
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:
| function LoadJpg(Stream: TStream): Boolean; var jpg: TJPEGImage; StreamPos: Int64; Temp: array[0..1] of char; begin Result := False;
StreamPos := Stream.Position; Stream.Read(Temp[0], 2); Stream.Position := StreamPos;
if ((Temp[0] = chr($FF)) and (Temp[1] = chr($D8))) then begin jpg := TJPEGImage.Create; try jpg.LoadFromStream(Stream);
Image1.Picture.Assign(jpg);
Result := True; finally jpg.Free; end; end; end; |
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.