Из журнала Deja Vu #08, Кемерово, 1999 (C) 02.1999 DaniEl/PGC/BDA __________________________________________ Конвеpсия гpафики в текст фоpмата ASCII. ---------------------------------------- Добрый день, уважаемые читатели! О чем пойдет речь вы, наверное, уже догадались! Да-да, о конверсии графики в текст. Попробуем сконвертить, к примеру, кар- тинку уважаемого ColorBok'а "kristina",вот она:
Сразу прикидываем графические символы, которые будем использовать при конверсии в порядке увеличения яркости:
Для более достоверного результата будем конвертить в 64-символьный формат. Получа- ется,на одну матрицу размером 8*8 pix при- ходится два символа. Алгоритм конверсии следующий: подсчиты- ваем количество пикселей для каждой матри- цы размером 4*8 и заносим в таблицу,разме- ром 24 строки умножить на 64 символа. Диа- пазон получаемых значений от 0 до 32. На основе данной таблицы создаем текстовый файл. Соответствие интенсивностей кодам ASCII: интенсивность ASCII 0 - 0 32 1 - 10 176 11 - 20 177 21 - 31 178 32 - 32 219 Это еще не все!Для универсальности тек- стового файла необходимо через каждые 64 символа вставить маркер конца строки - два кода #0D, #0A. После этого выгружайте го- товый текст и вставляйте куда душа пожела- ет! Если все понятно,то переходим к листин- гу, если непонятно,то все равно переходим: ;(C) DANIEL, 02.1999 ;GRAY SCALE GRAPHICS (6144 OR 6912) TO ASCII CONVERTOR V1.0 BETA ORG #8000 DI LD HL,#C000 LD DE,#C001 LD BC,#5FF LD (HL),L LDIR LD IX,#C000; буфер интенсивностей LD HL,#4000; "экранка" LD B,24 ; счетчик строк M1 PUSH BC PUSH HL LD B,32 M5 PUSH BC PUSH HL LD B,8 M4 PUSH BC LD B,4 ; старшая тетрада LD C,(HL) M2 RL C CALL C,INC1; подсчитываем интенсивность левой половинки DJNZ M2 ; знакоместа LD B,4 ; младшая тетрада M3 RL C CALL C,INC2; подсчитываем интенсивность правой половинки DJNZ M3 ; знакоместа INC H POP BC DJNZ M4 ; цикл для всего знакоместа INC IX INC IX POP HL INC L POP BC DJNZ M5 ; цикл для 32х знакомест POP HL LD B,8 M6 CALL DOWN_HL DJNZ M6 ; переход к следующей строке POP BC DJNZ M1 ; цикл для всех строк ;собственно начало конверсии LD BC,#600 LD HL,#C000 M7 LD A,(HL) OR A JR Z,S20 CP 32 JR Z,SDB CP 11 JR C,SB0 CP 21 JR C,SB1 LD (HL),#B2 M8 INC HL DEC BC LD A,B OR C JR NZ,M7 ;внедрение маркеров концов строк LD DE,#D000 LD HL,#C000 LD B,24 M9 PUSH BC LD BC,64 LDIR LD A,#0D LD (DE),A INC DE LD A,#0A LD (DE),A INC DE POP BC DJNZ M9 EI RET S20 LD (HL),#20 JR M8 SDB LD (HL),#DB JR M8 SB0 LD (HL),#B0 JR M8 SB1 LD (HL),#B1 JR M8 INC1 INC (IX+0) RET INC2 INC (IX+1) RET DOWN_HL INC H LD A,H AND 7 RET NZ LD A,L ADD A,32 LD L,A RET C LD A,H SUB 8 LD H,A RET Инструкция по использованию:грузим файл в "экранку", вызываем процедуру, сохраняем результат с адреса #D000, длиной 1584 бай- та. Если есть желание, попытайтесь попробо- вать использовать для конверсии более ши- рокий набор символов, можно проанализиро- вать файл атрибутов, т.к. в данном вариан- те от него результат не зависит, можно до- писать процедурку, которая будет убивать все пробелы, стоящие перед маркером конца строки, это слегка сократит размер файла. В общем дерзайте, результаты ваших мо- дернизаций мы с удовольствием разместим в очередном номере Deja VU. Удачи вам. Результат работы картинка "kristina" в текстовом виде:
Уже после написания конвертилки ко мне попали два подобных конвертера. ASCII Con- vertor v2.71 by Air/EdelweisS и конвертор by Jerry/AF. По качеству конверсии они, примерно, одинаковы, но почему-то резуль- тат работы первого конвертера сохраняется в каком-то непонятном формате. По интер- фейсу конвертор от Jerry/AF, конечно, луч- ше, но конвертер by Air/EdelweisS имеет множество настроек. Результат конвертера от Jerry/AF сохраняется в стандартном фор- мате ASCII (как и положено), только без маркеров конца строк, вот пример:
Конверсия достаточно медленная, но ка- чественная. По всей видимости здесь ис- пользуется весь символьный набор! Еще есть такой навороченный текстовый редактор Modern Word, доработанный Eterni- ty Industry, в котором есть plugin, позво- ляющий конвертить скрины, но он работает только в регистрированной версии, поэтому желающие могут прикупить этот редактор у авторов и конвертить, так сказать, "не от- ходя от кассы". Спасибо за внимание.