Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2008.11.30;
Скачать: [xml.tar.bz2];

Вниз

Размер (высота и ширина) 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 вся ветка

Форум: "Media";
Текущий архив: 2008.11.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
2-1224769834
Piero
2008-10-23 17:50
2008.11.30
Двумерный массив в классе


2-1224654637
DJones
2008-10-22 09:50
2008.11.30
Вопрос об OnClick компонента CheckBox.


15-1222415925
GanibalLector
2008-09-26 11:58
2008.11.30
Утерянный пароль для ОС Vista


4-1201550703
Звоновский
2008-01-28 23:05
2008.11.30
Подскажите как ужнать имя сласс по handle окона


15-1222757063
Любитель музыки
2008-09-30 10:44
2008.11.30
Чтение DVD-караоке на компьютере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский