Главная страница
    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-1224222180
SKIPtr
2008-10-17 09:43
2008.11.30
управление менеджером закачек


2-1224677195
Серж
2008-10-22 16:06
2008.11.30
Составление сервисом запроса.


9-1175692825
Ford
2007-04-04 17:20
2008.11.30
Электронные книги по созданию игр.


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


2-1224576210
Вопрошающий
2008-10-21 12:03
2008.11.30
ExportGridToExcel не экспортирует второй уровенть





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский