Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структура jpg 
V
    Опции темы
14SatanA88
Дата 9.9.2011, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Доброго времени суток, уважаемые программеры.

Пытаюсь считать размеры jpg файла. Это что-то вроде лабы, так что пользоваться уже созданными для работы с изображениями модулями нельзя.

Вот весь код:
Код

procedure TMainForm.btnJPGClick(Sender: TObject);
type JPGInfoHeader = packed record
    jpgWidth: WORD;
    jpgHeight: WORD;
    end;
var jpgMagic_l, jpgMagic_h: BYTE;
    fJPG: file of byte;
    bJPG: byte;
    buf: array[1..64] of byte;
    jpgfi: ^JPGInfoHeader;
    p: pointer;
begin

  // set filter on dialog
  OpenDialog.Filter:='JPG|*.jpg';

  // opening file
  if OpenDialog.Execute then
  begin
    imgJPG.Picture.LoadFromFile(OpenDialog.FileName);
    editJPG.Text:=OpenDialog.FileName;
    AssignFile(fJPG,OpenDialog.FileName);
    Reset(fJPG);
    memoJPG.Clear;
    // output
    Read(fJPG,jpgMagic_l);
    Read(fJPG,jpgMagic_h);
    memoJPG.Lines.Add('signature = '+inttohex(jpgMagic_l,2)+' '+inttohex(jpgMagic_h,2));
    while not eof(fJPG) do
    begin
      Read(fJPG,bJPG);
      if bJPG=$FF then
      begin
        Read(fJPG,bJPG);
        if ((bJPG=$C0) or (bJPG=$C2)) then
        begin
          BlockRead(fJPG,buf,sizeof(JPGInfoHeader));
          p:=@buf;
          memoJPG.Lines.Add('width = '+inttostr(jpgfi^.jpgWidth));
          memoJPG.Lines.Add('height = '+inttostr(jpgfi^.jpgHeight));
          exit;
        end;
      end;
    end;
    // end
    CloseFile(fJPG); 
  end;

end;


Насколько я понял, надо найти маркер 0xFFC0 или 0xFFC2, потому что там начинается секция с нужной мне инфой (ширина, высота)
Я делаю это так:
Код

    while not eof(fJPG) do
    begin
      Read(fJPG,bJPG);
      if bJPG=$FF then
      begin
        Read(fJPG,bJPG);
        if ((bJPG=$C0) or (bJPG=$C2)) then
        begin
          BlockRead(fJPG,buf,sizeof(JPGInfoHeader));
          p:=@buf;
          memoJPG.Lines.Add('width = '+inttostr(jpgfi^.jpgWidth));
          memoJPG.Lines.Add('height = '+inttostr(jpgfi^.jpgHeight));
          exit;
        end;
      end;
    end;


но эти строки
memoJPG.Lines.Add('width = '+inttostr(jpgfi^.jpgWidth));
memoJPG.Lines.Add('height = '+inttostr(jpgfi^.jpgHeight));
дают неправильный результат.

вопрос: что я делаю не так? как получить из jpg инфу, которая описана в http://afruj.wordpress.com/2008/08/01/imag...header-formats/
PM MAIL ICQ   Вверх
14SatanA88
Дата 14.9.2011, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



что, неужели никто не потрошил jpg?
PM MAIL ICQ   Вверх
AndreyIQ
Дата 14.9.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: 1
Всего: 8



Цитата(14SatanA88 @ 14.9.2011,  11:06)
что, неужели никто не потрошил jpg?

Если чесно лень разбираться, но судя по этому описанию, Вы не правильно читаете.
PM MAIL   Вверх
14SatanA88
Дата 14.9.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



AndreyIQ, спасибо, там ценная инфа
PM MAIL ICQ   Вверх
Alexeis
Дата 14.9.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Угу, там в теме есть ссылка на вот эту тему http://forum.vingrad.ru/forum/topic-105564.html где как раз есть полный кода для получения размеров жпеги. Это вариант ТС, но доведенный до ума.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
14SatanA88
Дата 15.9.2011, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Alexeis, когда я завел тему, думал, что на маркере SOFx первая инфа - это размер изображения.
я ошибался. просто учел смещение. 

всем спасибо, тема закрыта.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.