Конференция "Media" » Размер (высота и ширина) Jpeg и bmp
 
  • Jimmy (27.08.07 01:04) [0]
    Подскажите, полажуйста, как не открывая jpg и bmp файла определить высоту и ширину картинки в пикселях? Заранее спасибо.
  • {RASkov} © (27.08.07 02:13) [1]
    > [0] Jimmy   (27.08.07 01:04)
    > как не открывая jpg и bmp файла определить высоту и ширину
    > картинки в пикселях

    В любом случае - никак :)
    А вот открыть и не загружая весь файл, а считать размер из заголовка файла, возможно и можно, но я не знаю....
    Смотри форматы данных файлов.... может и найдешь ответ сам....
  • s7r © (27.08.07 08:58) [2]
  • исследователь © (27.08.07 08:59) [3]
    Только чтением информации из сигнатур, насколько я знаю, для каждого формата сигнатуры свои). s7r подсказывает абсолютно правильно.
  • Sapersky (27.08.07 14:07) [4]
    s7r ©   (27.08.07 08:58) [2]
    Есть статья:


    Ну зачем так далеко ходить:
    http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625329&n=21
  • @!!ex © (27.08.07 15:30) [5]
    Тут уже ответили, но всеже.
    Достаточно читать заголовок файла.
    Это не сложно, только он у каждого формата свой.
    Например в классическом BMP Ширина и Высота - 4 байтовые целочисленное беззнаковое и находиться соответственно на смещении 18 и 22
  • grisme © (27.08.07 17:32) [6]
    мда, вопрос читается, как арахисовый ^^'
  • Jimmy (27.08.07 17:35) [7]
    function ReadMWord(f: TFileStream): word;
     type TMotorolaWord = record
     case byte of
       0: (Value: word);
       1: (Byte1, Byte2: byte);
     end;
    var
     MW: TMotorolaWord;
    begin
     { It would probably be better to just read these two bytes in normally }
     { and then do a small ASM routine to swap them. But we aren't talking }
     { about reading entire files, so I doubt the performance gain would be }
     { worth the trouble.}
     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);
               { don't need these bytes }
               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;
               { Fake it to keep looping. }
             end;
           end;
         end;
       end;
     finally
       f.Free;
     end;
    end;

    Это процедура для определения размера (высота, ширина) JPG файла. Что здесь надо изменить, учитывая, что для bmp смещение 18 и 22, чтобы она работала для bmp?
  • clickmaker © (27.08.07 17:41) [8]

    > f := TFileStream.Create(sFile, fmOpenRead);

    это называется "не открывая jpg и bmp файла"?
  • {RASkov} © (27.08.07 18:22) [9]
    > [7] Jimmy   (27.08.07 17:35)
    > Это процедура для определения размера (высота, ширина) JPG
    > файла. Что здесь надо изменить, учитывая, что для bmp смещение
    > 18 и 22, чтобы она работала для bmp?

    http://www.ishodniki.ru/base/Pascal/bmpformat.zip
 
Конференция "Media" » Размер (высота и ширина) Jpeg и bmp
Есть новые Нет новых   [134431   +10][b:0][p:0]