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

Получить размер GIF-картинки

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

Получить размер GIF-картинки

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

type
   TImageSize = record
     Width: Integer;
     Height: Integer;
   end;

 function ReadGIFSize(Stream: TStream): TImageSize;
 type
   TGifHeader = record
     Signature: array [0..5] of Char;
     Width, Height: Word;
   end;
 var
   Header: TGifHeader;
 begin
   FillChar(Header, SizeOf(TGifHeader), #0);
   Result.Width := -1;
   Result.Height := -1;
   with Stream do
   begin
     Seek(0, soFromBeginning);
     ReadBuffer(Header, SizeOf(TGifHeader));
   end;
   if (AnsiUpperCase(Header.Signature) = 'GIF89A') or
     (AnsiUpperCase(Header.Signature) = 'GIF87A') then
   begin
     Result.Width  := Header.Width;
     Result.Height := Header.Height;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 const
   FileName = 'D:\test.gif';
 var
   fs: TFileStream;
   gifsize: TImageSize;
 begin
   fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
   try
     gifsize := ReadGIFSize(fs);
     ShowMessage(Format('Breite %d Hцhe %d', [gifsize.Width, gifsize.Height]));
   finally
     fs.Free;
   end;
 end;

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

Это код Delphi, который читает размер файла GIF-изображения с помощью функции ReadGIFSize и отображает его в сообщении.

Разбивка кода:

  1. Определен тип записи TImageSize, которая имеет два целочисленных поля: Width и Height.
  2. Функция ReadGIFSize принимает объект TStream (который представляет собой файл GIF) в качестве входного параметра и возвращает запись TImageSize.
  3. В функции:
    • Локальная переменная Header типа TGifHeader объявляется и инициализируется нулями с помощью FillChar.
    • Поле результата функции устанавливаются в -1, указывая, что размер не был прочитан еще.
    • Входной поток перемещается к началу с помощью Seek, а затем метод ReadBuffer используется для чтения заголовка GIF в переменную Header.
    • Если сигнатура заголовка GIF совпадает с 'GIF89A' или 'GIF87A', функция устанавливает поля результата в значения, хранящиеся в поле Width и Height заголовка.
  4. В процедуре Button1Click:
    • Определен константа FileName, указывающая на файл GIF.
    • Создается объект TFileStream fs для чтения файла.
    • Функция ReadGIFSize вызывается с fs в качестве входного параметра и результат хранится в локальной переменной gifsize.
    • Показано сообщение, отображающее ширину и высоту GIF-изображения, форматированное с помощью Format.

Альтернативное решение:

Вместо чтения заголовка GIF вручную можно использовать компонент TImageList или третьестороннюю библиотеку, которая предоставляет функциональность для чтения и манипуляции файлами GIF. Это упрощает код и делает его более надежным.

Например, можно использовать метод ReadGIF компонента TImageList для прямого чтения размера изображения:

procedure TForm1.Button1Click(Sender: TObject);
const
  FileName = 'D:\test.gif';
var
  fs: TFileStream;
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    with TImageList.Create do
      try
        LoadFromFile(fs);
        ShowMessage(Format('Width %d Height %d', [Width, Height]));
      finally
        Free;
      end;
  finally
    fs.Free;
  end;
end;

В этом коде создается временный объект TImageList, загружается файл GIF с помощью метода LoadFromFile и отображается ширина и высота изображения в сообщении. Объект TImageList освобождается, когда он больше не нужен, чтобы избежать утечек памяти.

Статья описывает функцию ReadGIFSize для чтения размера GIF-картинки из потока и ее применение в приложении Delphi.


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

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




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


:: Главная :: GIF ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:20:52/0.0056271553039551/1