DeaD_MoroZ Опубликовано 9 мая, 2009 Жалоба Поделиться Опубликовано 9 мая, 2009 (изменено) Доброго времени суток! Хочу написать вот такую небольшую прогу: Пользователь выбирает любую картинку, а программка делает с ней такой эффект, чтобы картинка сначала "сгнила", а потом превратилась в труху. Пишу на языке Си под DOS в Borland С++ 3.1. Под винду писать не умею пока. :D Вопрос 1: Как вставить картинку в прогу? Какая функция это делает? (если такая есть для ДОСа). Как я понимаю, должна быть такая функция, которая берёт картинку и вставляет её в массив в формате 3 байта на пиксел (R-G-B).. Вопрос 2: Чтобы сделать такой эффект, мне сказали пользоваться фильтрацией изображения и увеличением контраста. Так вот, если кто подскажет, где найти информацию об алгоритмах данных эффектов, буду оч признателен. :no: Изменено 9 мая, 2009 пользователем DeaD_MoroZ Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 мая, 2009 Жалоба Поделиться Опубликовано 9 мая, 2009 (изменено) DeaD_MoroZ: "В любви ничего невозможного нет." Кажется, Пьеха пела... Даже в любви к DOS. Про DOS даже песни есть... :) Однако под DOS поддерживается стандартно максимум 16 цветов, хотя можно найти специальные библиотеки функций, написанные энтузиастами DOS, расширяющие количество цветов до 256 и даже до 65536. Стоит ли их искать и в них разбираться - другой вопрос. Тем более, что все это было рассчитано под 16-битную DOS с ограничением размера массива в 64 килобайта. А на современном мониторе далеко не 64 тысячи точек, так что тут возникают дополнительные сложности разбиения картинки на части, впрочем, вполне преодолимые, хотя и не без некоторых усилий. Функция вывода рисунка есть и в стандартном C под DOS: putimage. Однако стандартно она тоже рассчитана на режим в 16 цветов, если больше - надо искать такие библиотеки, в которых есть ее аналог или дописывать эту библиотеку самому по образу и подобию имеющихся в библиотеке функций. Преобразовать картинку в массив, используемый в функции вывода рисунка, нетрудно - берем спецификацию формата BMP и превращаем каждый байт рисунка (он дает яркость одного из трех базовых цветов пиксела, поэтому обычно на пиксел расходуется в BMP три байта) в несколько бит, полагающихся нашей функции вывода рисунка, то есть редуцируем количество цветов до поддерживаемого функциями нашей библиотеки, после чего склеиваем эти биты в байты массива для функции вывода рисунка. Насчет "гниения картинки" я не совсем понял, видимо, имеется в виду уменьшение интенсивности цветов, это просто - интенсивность каждого базового цвета каждого пиксела кодируется несколькими битами, представляющими собой число, выражающее интенсивность цвета. Надо просто пробегать по массиву и уменьшать эти числа, после чего выводить снова этот массив. В труху превратить несложно - постепенно прореживаем массив, заменяя всё больше его элементов нулями. Увеличение контраста тоже несложно: считаем среднее значение яркости (интенсивности цветов), затем пробегаеи по массиву, делая интенсивность цветов пикселей с яркостью меньше средней еще меньше, а большей - еще больше (по возможности). Остается единственный вопрос - надо ли вообще осваивать умение бриться топором? :D P.S. (чтоб она сгнила и превратилась в труху)На проклятие похоже :no: Изменено 9 мая, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
DeaD_MoroZ Опубликовано 10 мая, 2009 Автор Жалоба Поделиться Опубликовано 10 мая, 2009 (изменено) Тролль: Спасибо большое за содержательый ответ! :) С выводом рисунка на экран всё понятно.. Насчёт забивки байтов данных рисунка в массив - я так понял никаких функций нет, которые делают это? Ну. если нет, то придётся читать спецификацию формата и вручную выдирать :1eye: Про гниение вы правильно поняли, вроде так всё и должно быть, картнка должна терять цвет) Использовать надофильтрацию и даж есть спец. алгоритм этого дела =) На проклятие похоже Ага, точняк.. Вот такие вот задания сейчас требуют в универе на 4-м курсе :) Вообщем, полазию, почитаю. посмотрю. Что-нибудь да и получится :) P.S: эээх, надо в винде учится прогать... с этим ДОСом далеко не убежишь.. Изменено 11 мая, 2009 пользователем DeaD_MoroZ Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти