Mc. Paintio — программа, преобразующая изображение в набор мышиных команд, рисующих это изображение / Хабрахабр. Привет, Хабрахабр! Статья претендует исключительно на пятничное чтиво и ничего феноменального в ней нет.
В ней повествуется об истории создания и разработке приложения Mc. Paintio, которое может рисовать изображения в любом* контексте любой** программы рисования. Статья будет интересна людям, увлекающимся программированием ботов и графической анимацией. Ave, добро пожаловать! Вместо вступления.
Давным- давно, в одной соцсети наткнулся я на интересное приложение. Это была коллаборативная (совместная многопользовательская) онлайн- рисовалка. Что- то в духе flockdraw. Просто сейчас такие игры уже не актуальны; редко бывает один- два человека зайдут, что- то намалюют и, непробыв и минуты, выйдут. Такое развлечение в наши дни умерло как класс, а ведь раньше народ хавал подобные забавы на ура! Ах, эти золотые времена одномегабайтовых флеш- игрушек и гиф- анимаций.
- Кто рисует патриотические граффити, почему закрашивают фасады и чем будет. Программа, как я понимаю, больше не существует.
- Нью-Йорка бороться с уличным искусством, реализуя программы по удалению граффити или по улучшению.
Когда я смотрю на стены, покрытые граффити, у меня возникает. Рисование граффити VK (Вконтакте): Eye draw (by Whitefield/AtomIC) - Duration: 3:47.
На этой странице Вы найдете описание что такое граффити вконтакте, как их рисовать, как закачивать готовые картинки с помощью программ. Мне понравилась программа.В статье все доступно рассказано.Действительно все очень просто в использовании.Экспериментирова
Так вот, о чём это я?! Я об этой вот игре говорю. Сейчас, конечно, там практически никого не бывает. А году эдак в 2. 00.
Ну человек за сто точно было онлайн. И людей это развлечение реально развлекало, причём от мала до велика. Круто считалось нарисовать что- то реально красивое. Все видели сам процесс твоего рисования, могли выразить восторг, могли что- нибудь пририсовать, а могли и испортить. Из инструментов — смешно вспомнить — тогда был только карандаш (pencil) и рука (pan) для прокручивания бесконечного полотна. Даже линии прямой нельзя было нарисовать, всё — от руки.
Ни тебе резинки, ни настройки цвета или толщины линии. Чата никакого не было, так что общались так: писали текст прямо на канве рисования, получалось жутко долго и очень коряво, ведь мышка — далеко не идеальный инструмент для рисования от руки. Отвечали другие игроки ниже под твоей надписью, ещё ниже — следующие, и холст превращался в сплошную стену текста. Благо стена бесконечная. Весело было. Особенно крутые были те, у кого дома в распоряжении имелся графический планшет. Они писали от руки красиво, быстро, чистенько, да и рисунки у них были на порядок лучше.
Никто не мог их переплюнуть. Лично у меня планшета не было, так что ваш покорный слуга первые недели три развлекался мышью. Но потом такой ход дел мне надоел. Захотелось мне быть не боярыней дворянскою, а владычицей морскою крутым художником и классно рисовать очень сложные рисунки.
Вначале я стал тренироваться «на кошках»: взял в распоряжение метаскриптовый язык Auto. IT под Windows и написал в нём пару простеньких программ. Первая рисовала просто окружность, а вторая — прямую линию. Приложение, в котором осуществлялись такие действия, «думало», что это пользователь двигает мышку и нажимает кнопки. На самом деле всё рисовал робот Auto. IT (что- то типа cnc- станка). Браузер интерпретировал движения и нажатия в контексте игры как процесс рисования, и игра транслировала рисунок на сервер.
Другие пользователи же не видят, что это не я рисую, а робот. Вот такая хитрость =) По сути — бот! Таким образом, я научился рисовать идеальные окружности и прямые линии.
Для школьников (а подваляющее большинство играющих было именно школьники), сидевших в игре, я был прямо скажем таки неким божеством. Я был божеством даже для людей с планшетом, так как даже на планшете, используя стилус, не нарисуешь идеальную окружность.
И в моих руках теперь были инопланетные технологии рисования! На каждый нарисованный мною идеальный круг набрасывалась целая толпа рисующих, и превращала его то в рисованного смешарика, то в часы, то в рожицу, ну и в какой угодно другой рисунок, в основе которого подразумевается круг.
Оставшиеся же разделились на два лагеря: те, кто завидовали, и те, кто восхищались. Завидовывшие из злости писали «читер», «чмо» и так далее, ну а восхищавшиеся перечёркивали высказывания завидующих и выражали восторг в письменной форме: «воу круто», «как у тебя это получается?», «это планшет?», «какая программа?» и так далее. Но развлечения с окружностями и линиями надоели мне довольно быстро, так как душа перфекциониста всегда хочет чего- то большего и трубеут создания идеального инструмента. Хотелось такого, чтоб любой рисунок, любой файл, любую графику можно было перенести на холст. Тогда я сел за создание того, что сейчас называется Mc.
Paintio. Mc. Paintio — это программа, преобразующая изображение в набор мышиных команд, рисующих это самое изображение. Эдакий мета- рисовальщик. А раз любое изображение можно аналитически перерисовать, то есть возможность нарисовать что угодно в любой канве любого приложения! Представьте, что вы берёте рисунок с замысловатым орнаментом и немедленно рисуете сложнейший сплайн, описывающий этот орнамент, прямо в окне 3. DMax! Не правда ли, это реально круто?! Я реально заморочился и оснастил Mc. Paintio клёвыми фишками.
Например, если рисунок, который необходимо нарисовать, больше, чем канва для рисования, которую предоставляет приложение, и приложение поддерживает операцию pan, то Mc. Paintio может нарисовать изображение поблочно, переключая в нужные моменты времени инструменты pan и pen и рисуя правильные фрагменты большого изображения в правильных местах холста! В Mc. Paintio присутствуют аж три разных алгоритма рисования, предназначенных для выполнения разного рода трассировок изображения и перенесения его в другую канву. Эти алгоритмы в различной степени удовлетворяют классическому trade- off'у между скоростью рисования и точностью рисования.
Я также оснастил Mc. Paintio возможностью рисования изображений в оттенках серого несколькими различными алгоритмами. Например, если требуется нарисовать изображение в оттенках серого и канва предоставляет инструмент для выбора цвета, то можно настроить Mc. Paintio так, чтобы он сам открывал палитру в приложении, выбирал нужный цвет, закрывал палитру и продолжал процесс рисования нужным цветом. Mc. Paintio также умеет писать пользовательский текст.
Mc. Paintio имеет в арсенале гибкую настройку кнопок управления и таймингов, позволяющую подстроить процесс рисования под самые требовательные приложения. В общем, поработал я на славу.
Правда, приложение получилось с очень скомканным интерфейсом. Это результат его неправильного планирования: со временем дописывались всё новые и новые функции в рандомном порядке, все они отразились так или иначе в интерфейсе, получилась куча мала, а переделывать лень. Пример 1. Начнём с самого простого. Скачали приложение (проверили его размер) и открываем простой небольшой чёрно- белый bmp- файл. Необходимо транслировать из файла то, что нарисовано чёрным, в другую канву. Пока что для подопытной канвы выберем простой Microsoft Paint. Будем рисовать первым из представленных алгоритмов — «к ближайшей точке».
Этот алгоритм движет перо от текущего пикселя в сторону ближайшего не закрашенного пикселя, закрашивая все промежуточные по пути. Если таких ближайших незакрашенных пикселей несколько, то выбирается случайный из них. Начинается рисование в случайном из ещё не закрашенных пикселе. В определённые моменты времени происходит перескок в новый случайный ещё не закрашенный пиксель (этот специально запрограммированный артефакт служит цели подстройки под интерфейс ещё первой программы колаборативного рисования, в которой ограничивалась длина максимальной линии, которую пользователь может нарисовать). Настраиваем кнопку старта трансляции на F1. F1. 2. Сначала пробуем рисовать прямо в самом Mc.
Paintio (для наглядности). Ставим мышь примерно в верхний левый угол рисунка и жмём F1. Видим, как движется мышь. В заголовке программа показывает количество частей (разрывов линии, подъёмов левой кнопки мыши), которые она произвела. В этот момент программа полностью перехватила управление мышью, и даже если я буду пытаться ей шевелить, у меня ничего не выйдет, так как в уже следующий квант времени мышь будет программно перемещена в нужную программе точку. Фиолетовым видим уже закрашенные пиксели изображения. Происходит процесс закраски, который в любой момент можем остановить, нажав на F1.
Можно заметить, что расстояние между ближайшими закрашенными пикселями не равно единице. Складывается впечатление, что программа пропускает некоторые пиксели. На самом деле это действительно так. И это не ошибка, а ещё один специально запрограммированный артефакт, который служит цели подстройки под интерфейс программы колаборативного рисования, в которой радиус пера составлял 2 пикселя.
А раз так, то, закрасив пиксель (x, y), нет смысла закрашивать пиксели (x + 1, y) и (x, y + 1); их можно просто пропустить, так как на холсте они уже закрашены. Для игнорирования этого артефакта и принудительного процессинга абсолютно всех пикселей служит галочка «точно». Когда показательный прогон показывает приемлемый результат, не дожидаясь окончания рисования останавливаем программу и переходим в Paint.
Ещё раз: необходимо транслировать из файла то, что нарисовано чёрным (а не белым). Черное — это пиксели с интенсивностью 0. Белое — это пиксели с интенсивностью 2. Mc. Paintio позволяет выбрать те интенсивности пикселей, которые необходимо считать переносимыми (рисуемыми, обрабатываемыми). И не просто одну конкретную интенсивность (скажем, 0), а даже диапазон. Сделано это было для того, чтобы корректно отрисовывать даже те необработанные изображения, которые содержат цветовые флуктуации в районе нуля и чёрный цыет в них не всегда имеет интенсивность 0, а разбросан от 0 до, скажем, 8.
Тогда, указав диапазон . Для указания диапазона служат поля «расслаивать» — указываем чёрное как .
Рассмотрим простой градиент: слева — чёрное, справа — белое. Если выбрать диапазон . Если же выбрать, скажем, . И, наконец, если выбрать . Обратите внимание на то, насколько широкая часть полосы отрисовывается.
Обратите внимание также и на то, что правый край полосы не ровный, а рваный. Это связано с тем, что градиент был подготовлен в Photoshop с использованием дизеринга. Посмотрите как перо плотно обтекает уже отрисованные участки.
Пример 3. В этом примере я демонстрирую точный режим рисования, о котором говорил ранее.