**
Determine the graphic format of a file** (Views: 100)

Problem/Question/Abstract: Is it possible to determine the graphic format of a file without the use of the extension, e.g. given a extension-less file, is it possible to determine whether it is BMP, JPEG or some other file that we can determine using some signature for that type? Answer: You can determine it without extention. Below is a function that reads the file header and determines the type. function PhysicalResolveFileType(AStream: TStream): Integer; var p: PChar; begin Result := 0; if not Assigned(AStream) then Exit; GetMem(p, 10); try AStream.Position := 0; AStream.Read(p[0], 10); {bitmap format} if (p[0] = #66) and (p[1] = #77) then Result := 1; {tiff format} if ((p[0] = #73) and (p[1] = #73) and (p[2] = #42) and (p[3] = #0)) or ((p[0] = #77) and (p[1] = #77) and (p[2] = #42) and (p[3] = #0)) then Result := 2; {jpg format} if (p[6] = #74) and (p[7] = #70) and (p[8] = #73) and (p[9] = #70) then Result := 3; {png format} if (p[0] = #137) and (p[1] = #80) and (p[2] = #78) and (p[3] = #71) and (p[4] = #13) and (p[5] = #10) and (p[6] = #26) and (p[7] = #10) then Result := 4; {dcx format} if (p[0] = #177) and (p[1] = #104) and (p[2] = #222) and (p[3] = #58) then Result := 5; {pcx format} if p[0] = #10 then Result := 6; {emf format} if (p[0] = #215) and (p[1] = #205) and (p[2] = #198) and (p[3] = #154) then Result := 7; {emf format} if (p[0] = #1) and (p[1] = #0) and (p[2] = #0) and (p[3] = #0) then Result := 7; finally Freemem(p); end; end; |