Autor Beitrag
tortom1000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: Di 22.11.05 09:39 
Hallo,
weiß jemand, wie man überprüfen kann, ob die Datei im JPG oder im BMP-Format vorliegt. An dem Dateinamen kann ich mich nicht orientieren, da teilweise die Dateien als BMP vorliegen, aber z.B. irgendwas.jpg heißen. Wenn ich die Datei dann ins TIMAGE lade, bekomme ich einen JPG-Fehler, den ich gerne vermeiden würde....
Viele Grüße
Tom
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 22.11.05 09:52 
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.
ausblenden 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;

  // reading first two bytes to test file and set cursor back to begin
  StreamPos := Stream.Position;
  Stream.Read(Temp[0], 2);
  Stream.Position := StreamPos;

  // if jpeg then read file.
  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.