Высота и ширина рисунка (HomeLisp)

Узнай цену своей работы

Формулировка задачи:

Прошу привести пример функции возвращающей список { высота ширина } для своего единственного аргумента имени_файла (строка). Предполагается что файл изображения расположен в каталоге с HomeLispIDE.

Решение задачи: «Высота и ширина рисунка (HomeLisp)»

textual
Листинг программы
(defun get-size (fname)
 (let ((buf (gensym 'buf))
       (fil (gensym 'fil))
       (w 0)
       (h 0)) 
      (bloCreate buf 10)
      (filOpen fil fname _BINARY_READ)
      (filSeek fil 19)
      (filGetBlo fil buf)
      (filClose fil) 
      (setq w (blo2fix buf 1 2))
      (setq H (blo2fix buf 5 2))
      (bloDestroy buf)
      (list w h))) 
 
==> GET-SIZE
 
(get-size "fil.bmp")
 
==> (200 300)
(get-size "pic-003.bmp")
 
==> (693 203)

Объяснение кода листинга программы

В данном коде определен функционал для получения размеров изображения, записанного в файл.

  1. Создается функция get-size, которая принимает в качестве аргумента имя файла.
  2. В функции создаются три вспомогательные переменные:
    • buf - буфер для чтения данных из файла,
    • fil - файловый объект,
    • w и h - переменные для хранения ширины и высоты изображения соответственно.
  3. Открывается файл с заданным именем в бинарном режиме чтения и считывается информация о размере изображения (19 байт, начиная с 1-го байта файла).
  4. Полученные данные записываются в буфер.
  5. Закрывается файловый объект.
  6. Из буфера извлекаются значения ширины и высоты изображения.
  7. Функция возвращает список с значениями ширины и высоты. При вызове функции get-size с аргументом fil.bmp возвращается список (200 300), что говорит о том, что ширина изображения равна 200, а высота - 300. При вызове функции get-size с аргументом pic-003.bmp возвращается список (693 203), что говорит о том, что ширина изображения равна 693, а высота - 203.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы