C TGA файлы
400 UAHЯ студент и мне нужно решить задание по С.
1. Программа загружает три параметра, используя параметры командной строки:
Путь к входному файлу TGA (i)
Путь к выходному файлу TGA (o)
Путь к папке со шрифтами (f)
Пример:
$ ./meme-generator img1.tga out.tga font
Если на входе программы нет всех трех параметров, записать строку с сообщением "Wrong parameters" и завершить программу кодом 1.
2. Программа также читает i из входного файла TGA. Если при загрузке возникает ошибка, выведите строку с сообщением "Could not load image" и выйдите из программы с кодом 1.
3. Программа загружает 26 изображений TGA из папки шрифтов (f), по одному на каждый символ большого английского алфавита. Файлы называются A.tga, B.tga, C.tga и т. д. (см. папку со шрифтами в шаблоне(template.tar)). Если при загрузке шрифта возникает ошибка, программа завершает работу с кодом 1.
4. Далее программа считывает из ввода строку, которая будет содержать два числа (top и bottom), разделенные пробелом. top сообщает, сколько строк текста отображать вверху изображения, а bottom сообщает, сколько строк текста отображать внизу изображения. Далее программа считывает из ввода top + bottom строки текста, которые постепенно прорисовываются во входное TGA-изображение.
Строка может содержать только строчные и прописные буквы английского алфавита и пробелы, остальные символы игнорируются. Преобразование строчных букв английского алфавита в прописные перед рендерингом (доступный шрифт содержит только прописные буквы).
Каждая строка может содержать не более 100 символов (включая символ новой строки).
5. Программа отрисовывает загруженные линии во входном изображении (top строками в верхней части и bottom строками в нижней части). Стиль рендеринга зависит от вас, но постарайтесь максимально точно следовать примеру примера.
6. Сохраните отредактированное входное TGA-изображение на диск в формате TGA по пути, указанному в параметрах командной строки. Когда вы пишете выходной файл TGA, вы получаете заголовок исходного входного файла! Это будет намного проще, чем пытаться восстановить правильный заголовок вручную.
В вашем распоряжении простой шаблон, в котором есть код для загрузки изображения TGA из скрипта, папка со шрифтом и два изображения для тестирования вашей программы. Пример кода не включает проверку ошибок! Вы должны добавить его в код самостоятельно.
Комментарий
Использование VLA запрещено.
При реализации задачи соответствующим образом определите свои собственные типы данных, например, для представления изображения TGA в памяти, чтобы вы могли хорошо работать с изображениями. Также создайте набор функций для обработки изображения TGA, чтобы у вас не было всего кода в main функции.
Вам не нужно поддерживать черно-белые изображения TGA или изображения TGA с прозрачностью (RGBA). Для этой задачи предположим, что все изображения TGA имеют глубину цвета 24 бита (RGB) и что их система координат начинается в верхнем левом углу (т. е. не разрешается 5-й бит в дескрипторе или значение начала/смещения в заголовок).
Вы столкнетесь с ошибками памяти при работе со строками или пикселями. Используйте Address sanitizer! Очень полезно будет использовать debuger VSCode при решении этой задачи. Даже при отладке/пошаговом режиме вы можете перенаправить файл на ввод программы, чтобы вам не приходилось все время записывать ввод вручную.
По верхним и нижним значениям вычислите позиции, в которых должны располагаться отдельные строки текста, а затем нанесите их на входное изображение TGA.
Отдельные изображения символов шрифта TGA содержат черный фон (RGB (0, 0, 0)) и белый передний план. При копировании символа в пиксели входного изображения игнорируйте пиксели черного фона и, таким образом, копируйте только нечерные пиксели. В противном случае у вас будет отвлекающий черный прямоугольник вокруг каждого символа на результирующем изображении.
Предположим, что высота каждого символа в шрифте 34 пикселя (см. код в шаблоне), ширина у каждого символа разная. При рисовании необходимо учитывать ширину нарисованных символов, чтобы отдельные символы не перекрывались.
Оставить комментарий в коде.
Приложения 1
Актуальные фриланс-проекты в категории C и C++
Сравнительный анализ эффективности кастомного ПО (v2.2-field) и эталонного ПО (Meshtastic v2.x)
1000 UAH
Сравнительный анализ эффективности кастомного ПО (v2.2-field) и эталонного ПО (Meshtastic v2.x) на идентичной аппаратной платформе (ESP32 + SX1268, 2W) по критериям дальности, пропускной способности, стабильности линка и энергопотребления. Провести тесты с замерами с учетом… C и C++, C# ∙ 3 дня 8 часов назад ∙ 2 ставки |
Консультация и аудит текущего проекта на Odoo 19 Community EditionИщем Odoo разработчика — соло-разработчика с опытом разработки на Odoo 19 Community Edition, в том числе с использованием Claude Code. Нам нужен специалист, который успешно реализовал проекты в Odoo и имеет практический опыт разработки с использованием Claude Code. Важно:… C и C++, Javascript и Typescript ∙ 6 дней 9 часов назад ∙ 8 ставок |
Разработка ПО для Arduino (RF-модули 3–7.5 ГГц, автоматическое сканирование частот)Необходимо разработать систему на Arduino для автоматического поиска активного аналогового видеосигнала и автоматической настройки передатчика на обнаруженную частоту.Планируется использование трех отдельных приемно-передающих модулей: 3000–4200 МГц; 4900–6000 МГц; 6100–7500… C и C++, Встраиваемые системы и микроконтроллеры ∙ 7 дней 9 часов назад ∙ 4 ставки |
Чёрная Украина (RP-проект на базе MTA)
51 835 UAH
|
Инженер по инфраструктуре резидентных проксиМы строим сеть резидентных прокси с нуля — полностью собственную, без сторонних поставщиков. Нам нужен один исключительный сетевой инженер для создания всей технической базы. Что вы будете строить: - Android SDK для фонового использования, который направляет прокси-трафик через… C и C++, DevOps ∙ 13 дней 6 часов назад ∙ 15 ставок |