Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.30;
Скачать: CL | DM;

Вниз

Размер (высота и ширина) Jpeg и bmp   Найти похожие ветки 

 
Jimmy   (2007-08-27 01:04) [0]

Подскажите, полажуйста, как не открывая jpg и bmp файла определить высоту и ширину картинки в пикселях? Заранее спасибо.


 
{RASkov} ©   (2007-08-27 02:13) [1]

> [0] Jimmy   (27.08.07 01:04)
> как не открывая jpg и bmp файла определить высоту и ширину
> картинки в пикселях

В любом случае - никак :)
А вот открыть и не загружая весь файл, а считать размер из заголовка файла, возможно и можно, но я не знаю....
Смотри форматы данных файлов.... может и найдешь ответ сам....


 
s7r ©   (2007-08-27 08:58) [2]

Есть статья:
http://articles.org.ru/cfaq/index.php?qid=2711&catid=32


 
исследователь ©   (2007-08-27 08:59) [3]

Только чтением информации из сигнатур, насколько я знаю, для каждого формата сигнатуры свои). s7r подсказывает абсолютно правильно.


 
Sapersky   (2007-08-27 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 ©   (2007-08-27 15:30) [5]

Тут уже ответили, но всеже.
Достаточно читать заголовок файла.
Это не сложно, только он у каждого формата свой.
Например в классическом BMP Ширина и Высота - 4 байтовые целочисленное беззнаковое и находиться соответственно на смещении 18 и 22


 
grisme ©   (2007-08-27 17:32) [6]

мда, вопрос читается, как арахисовый ^^"


 
Jimmy   (2007-08-27 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 ©   (2007-08-27 17:41) [8]


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

это называется "не открывая jpg и bmp файла"?


 
{RASkov} ©   (2007-08-27 18:22) [9]

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

http://www.ishodniki.ru/base/Pascal/bmpformat.zip



Страницы: 1 вся ветка

Текущий архив: 2008.11.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1224175418
Ibanez
2008-10-16 20:43
2008.11.30
Как возвести число в степень?


2-1224760314
azamat
2008-10-23 15:11
2008.11.30
работа с типами данных


4-1200806775
MTM
2008-01-20 08:26
2008.11.30
X509Certificate


15-1222511662
Игорь Шевченко
2008-09-27 14:34
2008.11.30
Предлагается звукотехника


2-1224490514
real K.
2008-10-20 12:15
2008.11.30
1С + DELPHI