Программирование на Delphi и не только Как узнать размеры JPG-файла? | Программирование на Delphi и не только

Delphi FAQ >> Графика

При помощи данной процедуры на Delphi можно узнать высоту и ширину картинки, сохраненной в формате JPEG:

function ReadMWord (f: TFileStream): Word;
type
  TMotorolaWord = record
  case byte of   0: (Value: Word);   1: (Byte1, Byte2: Byte);

end;


var   MW:TMotorolaWord;

begin

  f.Read(MW.Byte2, SizeOf(Byte));   f.Read(MW.Byte1, SizeOf(Byte));   Result := MW.Value;

end;

procedure GetJPGSize (const sFile:String; var wWidth, wHeight: Word);
const
  ValidSig: array[0..1] of byte = ($FF, $D8);   Parameterless = [$01, $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7];

var


  Sig: array[0..1] of byte;   f: TFileStream;   x: Integer;   Seg: Byte;

  Dummy: array[0..15] of Byte;

  Len: Word;   ReadLen: LongInt;

begin

  FillChar(Sig, SizeOf(Sig), #0);   f := TFileStream.Create(sFile, fmOpenRead);

  try

    ReadLen := f.Read(Sig[0], SizeOf(Sig));

    for x := Low(Sig) to High(Sig) do


      if (Sig[x] ValidSig[x]) then         ReadLen := 0;

    if (ReadLen > 0) then


    begin       ReadLen := f.Read(Seg, 1);

      while (Seg = $FF) and (ReadLen > 0) do


      begin         ReadLen := f.Read(Seg, 1);

        if (Seg $FF) then


        begin
          if (Seg = $C0) or (Seg = $C1) then
          begin             ReadLen := f.Read(Dummy[0], 3);             wHeight := ReadMWord(f);             wWidth := ReadMWord(f);

          end


          else
          begin
            if not (Seg in Parameterless) then
            begin               Len := ReadMWord(f);               f.Seek(Len - 2, 1);               f.Read(Seg, 1);

            end


            else               Seg := $FF;

        end;


      end;
    end;
  end;
  finally     f.Free;

  end;


end;

Ссылки в тему:
  Как узнать размеры PNG-файла?
  Как узнать размеры GIF-файла?

Чтобы смотреть любые клипы онлайн, достаточно иметь быстрый Интернет.