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