Главная страница
    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
15-1222602793
Дмитрий С
2008-09-28 15:53
2008.11.30
Молчаливый OleVariant


2-1224488717
dmitry_12_08_73
2008-10-20 11:45
2008.11.30
Удаление события мыши


6-1195160742
homm
2007-11-16 00:05
2008.11.30
TWebBrowser: Вызов процедуры на дельфи


15-1222777842
oldman
2008-09-30 16:30
2008.11.30
А ведь сегодня День Интернета в России...


15-1222253957
Delperec
2008-09-24 14:59
2008.11.30
Как проверить принадлежность точки кругу?..





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