Comments 25
Ссылки по теме: проигрывание видео на Intel 8088 и подробная презентация
Да, классная вещь:) А так-то вообще даже целый конкурс проводится: en.wikipedia.org/wiki/Text_Mode_Demo_Contest
Причем фильтр там работает в реалтайме, у меня-то неоптимизировано, одна картинка обрабатывается секунд 10.
Причем фильтр там работает в реалтайме, у меня-то неоптимизировано, одна картинка обрабатывается секунд 10.
Советую посмотреть исходный код libaa и libcaca
Народ больше фанатеет от местной символики.

А есть ли опция использования без фонового цвета? Тогда результаты пошли бы текстом в комментарии.

А есть ли опция использования без фонового цвета? Тогда результаты пошли бы текстом в комментарии.
Можно без фона, но придется перекомпилировать (#define ASCII вместо 0 — 1 в самом начале). Но это дело работает плохо, так как какая-то область может выделяться, но подберется именно фоном (с пустым символом) — тогда в результате, при выводе только символа, будет на этом месте пусто. См. пример здесь dimouse.ru/images/s.png по сравнению с картинкой в начале.
В том и дело, что цвет нужно регулировать только плотностью буквы. А вообще, если использовать псевдографические символы, то вопрос решится. Только непонятно, что за кодировка у ASCII-файла:
яяяяяя яяяяяя яяяяяя яяяяяя ЯЭжиьь ыАЙЧЭЋ ¬ёЬююэ яяя яяяяяя яяяяяя яяяяяя яяяяяя
— это фрагмент первой строчки, в которой я поставил пробелы на месте невидимых символов. Если вместо «яяяяяяя» будет белый псевдосимвол и т.д., но можно будет отображать картинку в HTML при условии, что у фонта эти псевдосимволы будут. И учесть, что псевдографических символов — 16 и они будут иметь один цвет.ascii-файл — это тупо дамп в таком виде: байт — номер символа ascii (я честно говоря, сам не помню какая там кодировка, скорее всего вообще досовская, см. шрифт в файле pdcfont.bmp), 3 байта — RGB компоненты цвета фона, 3 байта — RGB компоненты цвета символа.
Насчет HTML — я попробую сделать дамп в html.
Насчет HTML — я попробую сделать дамп в html.
Значится отчитываюсь:
html сохраняет: dimouse.ru/data/ansiconv2.rar
Но возникают те же проблемы, что я вкратце упоминал выше при использовании pdcurses:
Поскольку в браузере используются true type шрифты, то вывод не соответствует тому, как происходит подбор. Основная проблема в том, что сам символ и область под фон не равны — область под фон дается больше. И символы, конечно не 8 на 16. И вообще полный отстой получается.
В лучшем случае можно получить что-то вроде этого:

Не забудьте, что кодировка используется досовская (CP-866) и ее надо выставить в браузере!
Как альтернатива — можно использовать только нижнюю часть ASCII (до 128), но тогда будет некрасиво (только буквы).
Еще я в этой версии не использую символы до 32 (всякие рожицы и т.д.). Их вроде в html тоже можно выводить, но нужно как-то так: амперсант, решетка, номер символа. Я пока поленился добавить.
html сохраняет: dimouse.ru/data/ansiconv2.rar
Но возникают те же проблемы, что я вкратце упоминал выше при использовании pdcurses:
Поскольку в браузере используются true type шрифты, то вывод не соответствует тому, как происходит подбор. Основная проблема в том, что сам символ и область под фон не равны — область под фон дается больше. И символы, конечно не 8 на 16. И вообще полный отстой получается.
В лучшем случае можно получить что-то вроде этого:

Не забудьте, что кодировка используется досовская (CP-866) и ее надо выставить в браузере!
Как альтернатива — можно использовать только нижнюю часть ASCII (до 128), но тогда будет некрасиво (только буквы).
Еще я в этой версии не использую символы до 32 (всякие рожицы и т.д.). Их вроде в html тоже можно выводить, но нужно как-то так: амперсант, решетка, номер символа. Я пока поленился добавить.
>я в этой версии не использую символы до 32 (всякие рожицы и т.д.). Их вроде в html тоже можно выводить
А нет, нельзя их выводить в html
А нет, нельзя их выводить в html
У меня легко получилось «Habrastorage» вывести в HTML (результат) с помощью 2-й версии кодировщика. Но вопросы остались те же: с ним нельзя вывести картинки только с цветом шрифта, существенно используется цвет бекграунда. Поэтому для местных фанатов не подойдёт.
Хабр позволяет задавать цвет шрифта, но не цвет фона. Поэтому можно представить пользу от кодировщика в таком формате (в порядке бреда): юзеру с кармой меньше 0 не разрешают выводить картинки. Тогда он кодирует их в ASCII и выкладывает, обходя недостаток публикатора.
Хотя, возможно, что ему не дают никакими тегами пользоваться. Тогда публикация в ASCII могла бы пригодиться для любителей постить жесты типа «лицорука» в тексте (ASCII). Но тогда нужен формат Unicode. Псевдографика в Arial и Verdana поддерживается (я вот про эти: unicode-table.com/ru/sections/block-elements/, не все из них, а 16, из тут разбросали по кодам). Если преследовать эту практическую (но совершенно ненужную) цель, то каждый символ должен идти примерно в такой кодировке:
███▀▅▟▚▖▐▅▀▅▟███
Исходный код:
Хабр позволяет задавать цвет шрифта, но не цвет фона. Поэтому можно представить пользу от кодировщика в таком формате (в порядке бреда): юзеру с кармой меньше 0 не разрешают выводить картинки. Тогда он кодирует их в ASCII и выкладывает, обходя недостаток публикатора.
Хотя, возможно, что ему не дают никакими тегами пользоваться. Тогда публикация в ASCII могла бы пригодиться для любителей постить жесты типа «лицорука» в тексте (ASCII). Но тогда нужен формат Unicode. Псевдографика в Arial и Verdana поддерживается (я вот про эти: unicode-table.com/ru/sections/block-elements/, не все из них, а 16, из тут разбросали по кодам). Если преследовать эту практическую (но совершенно ненужную) цель, то каждый символ должен идти примерно в такой кодировке:
███▀▅▟▚▖▐▅▀▅▟███
Исходный код:
<font color=#eeeeee>█</font><font color=#dddddd>█</font><font color=#cccccc>█</font><font color=#6699ff>▀</font><font color=#6699ff>▅</font><font color=#669999>▟</font><font color=#6699cc>▚</font><font color=#6699ff>▖</font><font color=#aaccff>▐</font><font color=#aaaaff>▅</font><font color=#6699ff>▀</font><font color=#6699ff>▅</font><font color=#669999>▟</font><font color=#cccccc>█</font><font color=#dddddd>█</font><font color=#eeeeee>█</font>
Полезность её всё же есть по сравнению с чистым DOSом — представление кроссбраузерное и кроссплатформенное, позтому подтолкнёт кого-то на следующую мысль, особенно, если будет на Гитхабе и генерировать тексты из канваса на JS — у имеющейся программы на С++ я всё равно не заметил скорости, отрисовка картинки проходит за секунд 5-8.> У меня легко получилось «Habrastorage» вывести в HTML (результат)
Скорее всего вывод представлен в неправильной кодировке. Сравните вывод в браузере и в bmp. Но, согласен, вывод в дос-кодировке в html — это извращение жуткое:)
Я сделаю версию, ограничившись только этими символами ASCII (их где-то 50 на самом деле) + без фона (попробую поиграться) + добавлю вывод в html в нормальной кодировке. Интересно, что получится.
Скорее всего вывод представлен в неправильной кодировке. Сравните вывод в браузере и в bmp. Но, согласен, вывод в дос-кодировке в html — это извращение жуткое:)
Я сделаю версию, ограничившись только этими символами ASCII (их где-то 50 на самом деле) + без фона (попробую поиграться) + добавлю вывод в html в нормальной кодировке. Интересно, что получится.
dimouse.ru/data/ansiconv3.rar — новая версия.
Спасибо большое за комментарии — новый вариант мне очень нравится. Надеюсь, вам тоже понравится:)

P.S. В процессе пришлось немного погуглить для перевода DOS-кодировки в юникод. Возможно, кому-то тоже пригодится: www.lingua-systems.com/knowledge/unicode-mappings/cp866-to-unicode.html
Спасибо большое за комментарии — новый вариант мне очень нравится. Надеюсь, вам тоже понравится:)

P.S. В процессе пришлось немного погуглить для перевода DOS-кодировки в юникод. Возможно, кому-то тоже пригодится: www.lingua-systems.com/knowledge/unicode-mappings/cp866-to-unicode.html
Ой, прошу прощения за невнимательность — этот вариант был тоже с фоном. Обновил архив и добавил туда откомпилированную версию без фона.
Спасибо. Стало почти то, что можно вставлять в форумы: ). Правда, при умолчательных настройках Хрома (Times New Roman) пришлось добавить:
А в данный коммент тоже напрямую не вставишь, потому что таблицы поддерживаются только в статьях. И вообще, таблицы — тяжелее для отображения, чем строки, поэтому я бы предпочёл вариант со сплошным текстом. Но теперь эту страницу с таблицей можно легко конвертировать скриптом или регекспом и оптимизировать.
Хроника оптимизации (одними регекспами) такая: исходный ascii.html 80 на 24 в таблицах — 100.5 К (ни в один комментарий не влезет);
* приведение к хабровскому виду (font color) — 68K (многовато для комментария — не так давно даже статьи неявно ограничивали примерно на 42-45 К текста, сейчас не проверял);
* замена белых блоков на символы ░ (не нашёл пробельного среди псевдографики) — 44 К;
* убирание точек с запятой (хак HTML) — 42К;
* убрать по 3 символа справа и слева — 41 К;
Точечный фон выглядит плохо, поэтому дальше:
* Возврат к белым символам — 63К
* Оптимизация — объединение одинаковых последовательностей цветов — 42 К
(регексп
Судя по картинке, видны направления дальнейшей оптимизации:
1) сводить не к миллиону цветов, а к 256-1К, чтобы затем оптимизировать по рядам одинаковых цветов;
2) ввести 16 символов псевдографики, чтобы увеличить детальность картинки вдвое без дополнительных затрат символов.
<style>td{line-height: 1.1}</style>
, чтобы не было белых полос между строками.А в данный коммент тоже напрямую не вставишь, потому что таблицы поддерживаются только в статьях. И вообще, таблицы — тяжелее для отображения, чем строки, поэтому я бы предпочёл вариант со сплошным текстом. Но теперь эту страницу с таблицей можно легко конвертировать скриптом или регекспом и оптимизировать.
Хроника оптимизации (одними регекспами) такая: исходный ascii.html 80 на 24 в таблицах — 100.5 К (ни в один комментарий не влезет);
* приведение к хабровскому виду (font color) — 68K (многовато для комментария — не так давно даже статьи неявно ограничивали примерно на 42-45 К текста, сейчас не проверял);
* замена белых блоков на символы ░ (не нашёл пробельного среди псевдографики) — 44 К;
* убирание точек с запятой (хак HTML) — 42К;
* убрать по 3 символа справа и слева — 41 К;
Точечный фон выглядит плохо, поэтому дальше:
* Возврат к белым символам — 63К
* Оптимизация — объединение одинаковых последовательностей цветов — 42 К
(регексп
<font color=#ffffff>(.*?)</font><font color=#ffffff>(.*?)</font> на <font color=#ffffff>$1$2</font>
несколько раз). Остальные места не слишком пригодны для ручной оптимизации — цвета почти похожи, но отличаются на единицы и не группируются.Псевдокартинку на 42К текста убрал под спойлер, чтобы она не тормозила кому-либо рендеринг.
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███░░░░██████████████░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░███████████████████████████░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░███████████████████████████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░███████████████████████████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░██████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░██████░███████████████░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░███████░███████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░████████░███░████████████░░████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░
░███████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░█████░
░████████████████████████████████████████████████████████████████████████░
░████████████████████████████████████████████████████████████████████████░
░██████████████████████████████████████████████████████████████████████░░░
██████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████░████████████████████████████████
░█████░░█████████████████████████████████████████████████████████████████░
░░░░░░░███████████████████████████████████████░░░░░░░░███████████████░░░░░
░░░░░░░░░░░░████████░░░░████████░█████████████░░░░░░░░░░██████████░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░███████████████████████████░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░███████████████████████████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░███████████████████████████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░█████████████████████████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░██████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░██████░███████████████░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░███████░███████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░████████░███░████████████░░████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░
░███████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░█████░
░████████████████████████████████████████████████████████████████████████░
░████████████████████████████████████████████████████████████████████████░
░██████████████████████████████████████████████████████████████████████░░░
██████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████░████████████████████████████████
░█████░░█████████████████████████████████████████████████████████████████░
░░░░░░░███████████████████████████████████████░░░░░░░░███████████████░░░░░
░░░░░░░░░░░░████████░░░░████████░█████████████░░░░░░░░░░██████████░░░░░░░░░░░
Судя по картинке, видны направления дальнейшей оптимизации:
1) сводить не к миллиону цветов, а к 256-1К, чтобы затем оптимизировать по рядам одинаковых цветов;
2) ввести 16 символов псевдографики, чтобы увеличить детальность картинки вдвое без дополнительных затрат символов.
> 1) сводить не к миллиону цветов, а к 256-1К, чтобы затем оптимизировать по рядам одинаковых цветов;
Это можно сделать постфактум, как я приводил пример ниже.
> 2) ввести 16 символов псевдографики, чтобы увеличить детальность картинки вдвое без дополнительных затрат символов.
Сейчас используется 48 символов псевдографики с B0 до E0. Странно, что у вас в выводе ни одного такого не получилось, только полные квадраты. Можно посмотреть исходную картинку?
Это можно сделать постфактум, как я приводил пример ниже.
> 2) ввести 16 символов псевдографики, чтобы увеличить детальность картинки вдвое без дополнительных затрат символов.
Сейчас используется 48 символов псевдографики с B0 до E0. Странно, что у вас в выводе ни одного такого не получилось, только полные квадраты. Можно посмотреть исходную картинку?
Сделайте это в виде web сервиса!
Понятно, что если программа компилируется и даже делает то что нужно, то сложно желать чего-то большего, но…
С точки зрения качества исходного кода и его оформления в посте всё просто ужасно.
1. Оформлять части одного и того же цикла разными кусками кода — это жесть. Читается это плохо, особенно сложно уследить за зависимостями между частями цикла.
2. Несогласованные отступы, брезгование верхним регистром, фигурными скобками для внешних циклов и пробелами между составными частями выражений, короткие и не однозначно трактуемые имена переменных — такое ощущение, что вы на коленке это делали, не шибко запариваясь о результате. Понятно, что вам этот код как родной и сейчас вы в нём ориентируетесь, но через месяц вы и сами забудете, чем, например, r отличается от rr, а colch от curch.
3. Наконец, что мешало выложить его на тот же GitHub, чтобы при желании код можно было увидеть в браузере, а не запариваться со скачиванием архива и извлечением из него всей сути?
Я при виде такого кода вспоминаю себя самого в старших классах школы, когда я только учился программировать.
PS: Заглянул в ваш профиль, увидел запись «старший научный сотрудник Курчатовского Института» и вспомнил вот этот комментарий про физиков и программирование.
С точки зрения качества исходного кода и его оформления в посте всё просто ужасно.
1. Оформлять части одного и того же цикла разными кусками кода — это жесть. Читается это плохо, особенно сложно уследить за зависимостями между частями цикла.
2. Несогласованные отступы, брезгование верхним регистром, фигурными скобками для внешних циклов и пробелами между составными частями выражений, короткие и не однозначно трактуемые имена переменных — такое ощущение, что вы на коленке это делали, не шибко запариваясь о результате. Понятно, что вам этот код как родной и сейчас вы в нём ориентируетесь, но через месяц вы и сами забудете, чем, например, r отличается от rr, а colch от curch.
3. Наконец, что мешало выложить его на тот же GitHub, чтобы при желании код можно было увидеть в браузере, а не запариваться со скачиванием архива и извлечением из него всей сути?
Я при виде такого кода вспоминаю себя самого в старших классах школы, когда я только учился программировать.
PS: Заглянул в ваш профиль, увидел запись «старший научный сотрудник Курчатовского Института» и вспомнил вот этот комментарий про физиков и программирование.
Виноват, в профиле написано просто «научный сотрудник НИЦ „Курчатовский институт“». Простите мне мою невнимательность и примите пожелания того, чтобы она стала пророческой =).
Спасибо за комментарий!
Да, я согласен, что упомянутые выше проблемы с культурой кода у меня имеют место быть. Как туториал такое, конечно, не годится — плохой пример. Могу сказать только, что культуру кода мне никто не прививал, никогда не было начальника, который бы следил за этим, у нас там всё довольно либерально — работает и ладно. И лень, конечно. Если бы работал где-то в IT, то, думаю, меня бы приструнили. А так — лень. И вообще консервативность, хоть я и не из поколения «программистов на фортране» (хотя знаю довольно молодых товарищей, которые продолжают это делать, в Протвино, например). Надеюсь, что я смогу перебороть лень когда-нибудь и буду писать красивый и приятный код и не лениться.
P.S. Комментарий про физиков-программистов повеселил. Конечно, не всё так плохо, но общая тенденция схвачена верно. А почему так — я написал выше.
P.P.S. Не старший, пока просто нс. Защищусь наконец — буду старшим.
Да, я согласен, что упомянутые выше проблемы с культурой кода у меня имеют место быть. Как туториал такое, конечно, не годится — плохой пример. Могу сказать только, что культуру кода мне никто не прививал, никогда не было начальника, который бы следил за этим, у нас там всё довольно либерально — работает и ладно. И лень, конечно. Если бы работал где-то в IT, то, думаю, меня бы приструнили. А так — лень. И вообще консервативность, хоть я и не из поколения «программистов на фортране» (хотя знаю довольно молодых товарищей, которые продолжают это делать, в Протвино, например). Надеюсь, что я смогу перебороть лень когда-нибудь и буду писать красивый и приятный код и не лениться.
P.S. Комментарий про физиков-программистов повеселил. Конечно, не всё так плохо, но общая тенденция схвачена верно. А почему так — я написал выше.
P.P.S. Не старший, пока просто нс. Защищусь наконец — буду старшим.
Я кстати не понял насчет EGA. Что там не получится? Какие символы большие и какое разрешение низкое? EGA в текстмоде = VGA в текстмоде. А при умелых ручках еще аппаратно можно такие штуки вытворять, что VGA можно не на всех видеокартах.
Ну так про 16 цветов и про 16 пар вы согласны? Символы я использую 8 на 16, можно использовать 8 на 8, тогда возможностей будет больше. Точно так же можно использовать разрешения 80 на 30 (что не сильно больше, конечно) или SVGA
132×25 16 colors VESA-compatible Super VGA
132×43 16 colors VESA-compatible Super VGA
132×50 16 colors VESA-compatible Super VGA
132×60 16 colors VESA-compatible Super VGA
Но по религиозным соображениям я не хочу. Ну а вообще исходники есть — можно округлять цвета или подгонять под EGA палитру, или же уже картинку результат в подходящем граф. редакторе подогнать под палитру EGA.
132×25 16 colors VESA-compatible Super VGA
132×43 16 colors VESA-compatible Super VGA
132×50 16 colors VESA-compatible Super VGA
132×60 16 colors VESA-compatible Super VGA
Но по религиозным соображениям я не хочу. Ну а вообще исходники есть — можно округлять цвета или подгонять под EGA палитру, или же уже картинку результат в подходящем граф. редакторе подогнать под палитру EGA.
Чтобы не быть голословным, вот быстрый конверт картинки из титульного сообщения в EGA палитру:

Как видно, получается полная ерунда. И надо еще принять во внимание, что в текстмоде это показываться, наверное, не будет, так как цветовых пар фон-символ должно быть тоже 16 (наверное, это обходится, конечно, но в pdcurses так). Для более контрастных изображений, должно быть, получится лучше.

Как видно, получается полная ерунда. И надо еще принять во внимание, что в текстмоде это показываться, наверное, не будет, так как цветовых пар фон-символ должно быть тоже 16 (наверное, это обходится, конечно, но в pdcurses так). Для более контрастных изображений, должно быть, получится лучше.
Sign up to leave a comment.
Конвертируем картинку в ANSI