Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить или установить разрешение JPEG

Delphi , Графика и Игры , JPEG

Получить или установить разрешение JPEG

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure GetResJpg(JPGFile: string);
 const
   BufferSize = 50;
 var
   Buffer: string;
   Index: integer;
   FileStream: TFileStream;
   HorzRes, VertRes: Word;
   DP: Byte;
   Measure: string;
 begin
   FileStream := TFileStream.Create(JPGFile,
     fmOpenReadWrite);
   try
     SetLength(Buffer, BufferSize);
     FileStream.Read(buffer[1], BufferSize);
     Index := Pos('JFIF' + #0$00,buffer);
     if Index > 0 then
     begin
       FileStream.Seek(Index + 6, soFromBeginning);
       FileStream.Read(DP, 1);
       case DP of
         1: Measure := 'DPI'; //Dots Per Inch 
        2: Measure := 'DPC'; //Dots Per Cm. 
      end;
       FileStream.Read(HorzRes, 2); // x axis 
      HorzRes := Swap(HorzRes);
       FileStream.Read(VertRes, 2); // y axis 
      VertRes := Swap(VertRes);
     end
   finally
     FileStream.Free;
   end;
 end;

 procedure SetResJpg(name: string; dpix, dpiy: Integer);
 const
   BufferSize = 50;
   DPI = 1; //inch 
  DPC = 2; //cm 
var
   Buffer: string;
   index: INTEGER;
   FileStream: TFileStream;
   xResolution: WORD;
   yResolution: WORD;
   _type: Byte;
 begin
   FileStream := TFileStream.Create(name,
     fmOpenReadWrite);
   try
     SetLength(Buffer, BufferSize);
     FileStream.Read(buffer[1], BufferSize);
     index := POS('JFIF' + #0$00,buffer);
     if index > 0
       then begin
       FileStream.Seek(index + 6, soFromBeginning);
       _type := DPI;
       FileStream.write(_type, 1);
       xresolution := swap(dpix);
       FileStream.write(xresolution, 2);
       yresolution := swap(dpiy);
       FileStream.write(yresolution, 2);
     end
   finally
     FileStream.Free;
   end;
 end;

Вот перевод контента на русский язык:

Это пары процедур Delphi, которые манипулируют информацией о разрешении в файлах JPEG. Первая процедура GetResJpg читает данные о разрешении из файла JPEG и возвращает их в виде двух целых значений (горизонтальное и вертикальное разрешение). Вторая процедура SetResJpg записывает новые данные о разрешении в файл JPEG.

Вот подробный анализ, что каждая процедура делает:

GetResJpg

  1. Открывает указанный файл JPEG в режиме чтения-записи с помощью TFileStream.
  2. Читает первые 50 байт файла в буферную строку.
  3. Ищет маркер 'JFIF' (начало заголовка JPEG) и позиционирует поток файла на этом месте + 6 байт (где начинается информация о разрешении).
  4. Читает одиночный байт из файла, который указывает, является ли разрешение в Дотах в дюйме (DPI) или Дотах в сантиметре (DPC).
  5. В зависимости от этого значения читает два следующих байта, представляющих горизонтальное и вертикальное разрешения.
  6. Переставляет порядок значений разрешения для соответствия формату Delphi (little-endian).
  7. Наконец, освобождает поток файла.

SetResJpg

  1. Открывает указанный файл JPEG в режиме чтения-записи с помощью TFileStream.
  2. Читает первые 50 байт файла в буферную строку.
  3. Ищет маркер 'JFIF' и позиционирует поток файла на этом месте + 6 байт (где начинается информация о разрешении).
  4. Записывает одиночный байт в файл, указывающий, является ли новое разрешение в DPI или DPC.
  5. Записывает два следующих байта, представляющих горизонтальное и вертикальное разрешения.
  6. Наконец, освобождает поток файла.

Некоторые примечания к коду:

  • Константа BufferSize установлена в 50, что кажется произвольным выбором. Возможно, лучше читать весь заголовок сразу, а не по частям.
  • Функция Pos используется для поиска маркера 'JFIF', но неизвестно, почему это необходимо. Маркер должен всегда быть presente в начале файла JPEG.
  • Функция Swap используется для перестановки порядка значений разрешения. Это, вероятно, связано с различиями в порядке байтов между Delphi и другими платформами.
  • В коде нет механизмов обработки ошибок или проверки вводных данных (например, проверки существования файла, проверки недопустимых значений разрешения).

В целом, эти процедуры seem to be функциональны, но могут потребовать рефакторинга и дополнительного тестирования для обеспечения их корректности и устойчивости.

В статье описывается код на Delphi для получения и установки разрешения JPEG-изображения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: JPEG ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 07:09:08/0.0034811496734619/0