Из журнала 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, позво-
ляющий конвертить скрины, но  он  работает
только в регистрированной  версии, поэтому
желающие могут прикупить этот  редактор  у
авторов и конвертить, так сказать, "не от-
ходя от кассы".

           Спасибо за внимание.