Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 12:34   #1
z768
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 45
По умолчанию Определить размер Jpeg ?

Сорри, просмотрел форум и инет, решения так и не нашел.
Может плохо искал.
Задача такова.
Есть файл, бинарник, в нем зарыты несколько jpeg-файлов.
Отыскать их не проблема, но есть одно Но...
Извлечь нужно по определенному размеру, допустим если картинка меньше чем 320х240 = идем дальше,
иначе = извлекаем...
Готовое решение не прошу, просто подскажите где и как раскопать эти
320х240 в jpeg ???
z768 вне форума Ответить с цитированием
Старый 11.12.2013, 12:53   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Достаточно искать заголовки JPEG'ов, там жуе будет размер тела и посчитать целый размер файла - проблем не составит. Ищите описание формата JPEG.
Человек_Борща вне форума Ответить с цитированием
Старый 11.12.2013, 13:09   #3
z768
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 45
По умолчанию

Так вот искал... Так и не "вьехал" где найти описание в заголовке файла разрешения картинки, и как пересчитать, потому и спросил...
z768 вне форума Ответить с цитированием
Старый 11.12.2013, 14:48   #4
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от z768 Посмотреть сообщение
Так вот искал... Так и не "вьехал" где найти описание в заголовке файла разрешения картинки, и как пересчитать, потому и спросил...
Гугли по вопросу -"информация о файле делфи".
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 11.12.2013, 16:05   #5
z768
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Rockot Посмотреть сообщение
Гугли по вопросу -"информация о файле делфи".
От гугли слышу...
Не по теме прошу не выражатся... гуглил... потому и задаю вопрос ALL...
Сам то понял, о чем написал... или посты важней ?
z768 вне форума Ответить с цитированием
Старый 11.12.2013, 16:49   #6
z768
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 45
По умолчанию

Человек_Борща, размер файла меня не интересует (он непредсказуем), у меня интерес к картинке (640х400 или какая там в файле находится), что бы сразу определится и выдернуть нужную, остальные не трогать...
z768 вне форума Ответить с цитированием
Старый 11.12.2013, 17:14   #7
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

На хабре, например, все подробно расписано. http://habrahabr.ru/post/102521/
Раздел "Маркер [FF C0]: SOF0 — Baseline DCT" (для поиска)
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 11.12.2013, 17:37   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
function GpegSize(var Size: TPoint; FileName: String): Boolean;
var Handle: Integer;
    xOk: Boolean;
    Buffer: array [0..1] of Byte;
begin
  Result:=False;
  Handle:=FileOpen(FileName,fmOpenRead	or fmShareDenyNone);
  if Handle<0 then Exit;
  try
    if FileSeek(Handle,2,0)<0 then Exit;
    xOk:=False;
    repeat
      if FileRead(Handle,Buffer,2)<>2 then Exit;
      if Buffer[0]<>$FF then Exit;
      xOk:=Buffer[1]=$C0;
      if not xOk then begin
        if Buffer[1]=$D9 then Exit;
        if FileRead(Handle,Buffer,2)<>2 then Exit;
        if FileSeek(Handle,Buffer[0]*256+Buffer[1]-2,1)<0 then Exit;
      end;
    until xOk;
    if FileSeek(Handle,3,1)<0 then Exit;
    if FileRead(Handle,Buffer,2)<>2 then Exit;
    Size.Y:=Buffer[0]*256+Buffer[1];
    if FileRead(Handle,Buffer,2)<>2 then Exit;
    Size.X:=Buffer[0]*256+Buffer[1];
    Result:=True;
  finally
    FileClose(Handle);
  end;
end;


procedure TForm1.Button3Click(Sender: TObject);
var xSize: TPoint;
begin
  if GpegSize(xSize,'e:\Fon1.jpg')
    then ShowMessage(Format('Ширина=%d, высота=%d',[xSize.X,xSize.Y]))
    else ShowMessage('Ошибка');
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.12.2013, 19:08   #9
z768
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
На хабре, например, все подробно расписано. http://habrahabr.ru/post/102521/
Раздел "Маркер [FF C0]: SOF0 — Baseline DCT" (для поиска)
А вот на это я как бы не обратил внимания, хотя эту ссылку пересмотрел пару раз исчо до темы на форуме, спасибо что лицом в х..рязь

Всем спасибо, вот еще хорошая ссылка
http://vbzero.narod.ru/chapter3/article_4.htm
по этой теме.
Исходя из описанного выше напрашивается простейший алгоритм определения размера графического изображения файла JFIF: проверить наличие в байтах с 7 по 11 наличие идентификатора JFIF0, чтобы убедится, что это JPG, а затем читать все байты подряд, пока не найдется маркер начала кадра SOF0 (FF CO), и отсчитав от него четыре байта, получить высоту и ширину картинки.

Ну направили наконец на путь истинный...
Всем Удачи.

Последний раз редактировалось z768; 11.12.2013 в 19:27.
z768 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить размер файла в инете -Jack- Общие вопросы Delphi 4 23.09.2013 15:21
Как определить размер видеостраницы axeforever12009 Помощь студентам 2 18.06.2013 17:01
Как определить размер структуры stpdqstns Общие вопросы C/C++ 10 30.01.2013 19:02
Определить размер Pipe IceBreaker Помощь студентам 4 04.02.2010 18:28
Уменшить размер Jpeg Asadullo Помощь студентам 2 27.02.2007 07:20