procedure SeekForFrame; type TSegHeader = packed record Flag: WORD; LenHi, LenL Byte; end; var Seg: TSegHeader; begin with Seg, FS do repeat Read(Seg, SizeOf(Seg)); if Flag <> JPEG_FRAME then Position := Position + MakeWord(LenLo, LenHi) - 2; until (Position >= Fs.Size) or (Seg.Flag = JPEG_FRAME); end;
begin FS := TFileStream.Create(FileName, fmOpenRead); try { JPEG 文件开头必须为 FF D8,文件尾必须为 FF D9 } FS.Read(Flag1, SizeOf(Flag1)); FS.Position := FS.Size - 2; FS.Read(Flag2, SizeOf(Flag2)); result := (Flag1 = JPEG_FLAG_BEGIN) and (Flag2 = JPEG_FLAG_END); if not result then exit; { 不是合法的JPEG文件则退出 }
procedure TForm1.Button1Click(Sender: TObject); var W, H: Word; begin with OpenDialog1 do if Execute then if GetJPEGSize(FileName, W, H) then Caption := Format('Yes,W:%d,H:%d', [W, H]) else Caption := 'No'; end;