Да, этого можно ожидать время от времени. В то время как new
резервирует место для данных, delete
просто делает недействительным указатель, созданный с помощью new
, позволяя записывать данные в ранее зарезервированных местах; он не обязательно удаляет данные. Однако вы не должны полагаться на это поведение, поскольку данные в этих местах могут меняться в любое время, что может привести к неправильной работе вашей программы. Вот почему после использования delete
указателя (или delete[]
в массиве, выделенном с помощью new[]
), вы должны назначить ему NULL, чтобы вы не могли вмешиваться в неправильный указатель, если вы не будете выделите память с помощью new
или new[]
перед повторным использованием этого указателя.
Понятие большого уровня изображения просто:
Каждому печатаемому символу можно присвоить приблизительное полутоновое значение; "в" знаке @
, очевидно, является визуально более темным, чем "плюс" знак +
, например. Эффект будет варьироваться, в зависимости от шрифта и располагающий с интервалами на самом деле используемый.
На основе пропорций выбранного шрифта, сгруппируйте входное изображение в прямоугольные пиксельные блоки с постоянной шириной и высотой (например, прямоугольник 4 пикселя шириной и 5 пикселей высотой). Каждый такой блок станет одним символом в выводе. (Используя пиксельные блоки, просто упомянутые, изображение 240w-x-320h стало бы 64 строками 60 символов.)
Вычисляют среднее полутоновое значение каждого пиксельного блока.
Для каждого пиксельного блока, выберите символ, полутоновое значение которого (от шага 1) является хорошим приближением пиксельного среднего числа блока (от шага 3).
Это - самая простая форма осуществления. Более сложная версия также возьмет фактическое формы из символов во внимание при повреждении связей среди кандидатов на пиксельный блок. Например, "наклонная черта" (/
) была бы лучшим выбором, чем "наклонная черта влево" (\
) для пиксельного блока, который, кажется, имеет функцию контраста bottom-left-to-upper-right.
Также можно смотреть на телефон libcaca
(последний выпуск 2014), который соответственно к их веб-сайту имеет следующие улучшения по сравнению с aalib
:
Я нашел этот статья CodeProject записанный Daniel Fisher содержащий простое реализация C# из изображения к алгоритму преобразования ASCII-творчества.
Это шаги, которые выполняет программа/библиотека:
Довольно легкий, не так ли?
BTW: В комментариях к статье я нашел этот прохладная реализация AJAX : Генератор ASCII-ТВОРЧЕСТВА Gaia Ajax :
[...] я чувствовал себя вынужденным продемонстрировать, что это могло легко быть сделано в стандартизированном наборе веб-технологий. Я намеревался видеть, мог ли я найти, что некоторые библиотеки использовали, и я нашел codeproject статью Sau Fan Lee о его ASCII fying библиотекой.NET.
P.S.: Lucas (см. комментарии) нашел другой статья .
CodeProjectaalib (последний выпуск в 2001) является библиотекой ASCII-творчества с открытым исходным кодом, это используется в приложениях как mplayer. Можно хотеть проверить его исходный код, чтобы видеть, как это делает это. Кроме этого, эта страница описывает более подробно о том, как работают такие алгоритмы.