日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Delphi獲取JPG圖片的高度、寬度

 dwbboy 2018-01-15
{ Copyright Kingron 2002 }
function GetJPEGSize(FileName: string; var Width, Height: WORD): Boolean;
const
  JPEG_FLAG_BEGIN = $D8FF;
  JPEG_FLAG_END = $D9FF;
  JPEG_FRAME = $C0FF;
var
  FS: TFileStream;
  Flag1, Flag2: WORD;
  B: Byte;



  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文件則退出 }



    FS.Position := 2;
    SeekForFrame; { 尋找JPEG的Frame段,即圖像數據區(qū) }
    FS.Read(B, SizeOf(B)); { Frame段段頭后第一個Byte為數據精度 }



    FS.Read(B, SizeOf(B)); { 高度高字節(jié) }
    WordRec(Height).Hi := B;
    FS.Read(B, SizeOf(B)); { 高度低字節(jié) }
    WordRec(Height).Lo := B;



    FS.Read(B, SizeOf(B)); { 寬度高字節(jié) }
    WordRec(Width).Hi := B;
    FS.Read(B, SizeOf(B)); { 寬度低字節(jié) }
    WordRec(Width).Lo := B;
  finally
    FS.Free;
  end;
end;

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;
//該代碼片段來自于: http://www./codes/delphi/8989

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多