[Delphi (Object Pascal)] Delphi获取JPG图片的高度、宽度 →→→→→进入此内容的聊天室

来自 , 2021-03-10, 写在 Delphi (Object Pascal), 查看 101 次.
URL http://www.code666.cn/view/52aaa62e
  1.  
  2. { Copyright Kingron 2002 }
  3. function GetJPEGSize(FileName: string; var Width, Height: WORD): Boolean;
  4. const
  5.   JPEG_FLAG_BEGIN = $D8FF;
  6.   JPEG_FLAG_END = $D9FF;
  7.   JPEG_FRAME = $C0FF;
  8. var
  9.   FS: TFileStream;
  10.   Flag1, Flag2: WORD;
  11.   B: Byte;
  12.  
  13.  
  14.  
  15.   procedure SeekForFrame;
  16.   type
  17.     TSegHeader = packed record
  18.       Flag: WORD;
  19.       LenHi, LenL Byte;
  20.     end;
  21.   var
  22.     Seg: TSegHeader;
  23.   begin
  24.     with Seg, FS do
  25.       repeat
  26.         Read(Seg, SizeOf(Seg));
  27.         if Flag <> JPEG_FRAME then
  28.           Position := Position + MakeWord(LenLo, LenHi) - 2;
  29.       until (Position >= Fs.Size) or (Seg.Flag = JPEG_FRAME);
  30.   end;
  31.  
  32.  
  33.  
  34. begin
  35.   FS := TFileStream.Create(FileName, fmOpenRead);
  36.   try
  37.     { JPEG 文件开头必须为 FF D8,文件尾必须为 FF D9 }
  38.     FS.Read(Flag1, SizeOf(Flag1));
  39.     FS.Position := FS.Size - 2;
  40.     FS.Read(Flag2, SizeOf(Flag2));
  41.     result := (Flag1 = JPEG_FLAG_BEGIN) and (Flag2 = JPEG_FLAG_END);
  42.     if not result then exit; { 不是合法的JPEG文件则退出 }
  43.  
  44.  
  45.  
  46.     FS.Position := 2;
  47.     SeekForFrame; { 寻找JPEG的Frame段,即图像数据区 }
  48.     FS.Read(B, SizeOf(B)); { Frame段段头后第一个Byte为数据精度 }
  49.  
  50.  
  51.  
  52.     FS.Read(B, SizeOf(B)); { 高度高字节 }
  53.     WordRec(Height).Hi := B;
  54.     FS.Read(B, SizeOf(B)); { 高度低字节 }
  55.     WordRec(Height).Lo := B;
  56.  
  57.  
  58.  
  59.     FS.Read(B, SizeOf(B)); { 宽度高字节 }
  60.     WordRec(Width).Hi := B;
  61.     FS.Read(B, SizeOf(B)); { 宽度低字节 }
  62.     WordRec(Width).Lo := B;
  63.   finally
  64.     FS.Free;
  65.   end;
  66. end;
  67.  
  68. procedure TForm1.Button1Click(Sender: TObject);
  69. var
  70.   W, H: Word;
  71. begin
  72.   with OpenDialog1 do
  73.     if Execute then
  74.       if GetJPEGSize(FileName, W, H) then
  75.         Caption := Format('Yes,W:%d,H:%d', [W, H])
  76.       else Caption := 'No';
  77. end;
  78. //delphi/8989

回复 "Delphi获取JPG图片的高度、宽度"

这儿你可以回复上面这条便签

captcha