Deja Vu #08
31 мая 1999

CODING - Конверсия графики в текст-формат ASCII.

AY-Track:     LITTLE WIZARD, MUZIC 2      
__________________________________________


(C) 02.1999 DaniEl/PGC/BDA
__________________________________________


 Конвеpсия гpафики в текст фоpмата ASCII.
 ----------------------------------------


   Добрый день, уважаемые читатели! О  чем
пойдет речь вы, наверное, уже  догадались!
Да-да, о конверсии графики в текст.
   Попробуем сконвертить, к  примеру, кар-
тинку уважаемого ColorBok'а "kristina",вот
она:

     k
     r
     i
     s
     +
     +
     l
     l
     l
     l
     l
     l
     l
     l
     l
     l
     l
     l
     l
     l

   Сразу прикидываем графические  символы,
которые будем использовать при конверсии в
порядке увеличения яркости:

              " " - код  32
              "░" - код 176
              "▒" - код 177
              "▓" - код 178
              "█" - код 219


   Для более достоверного результата будем
конвертить в 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 (как  и  положено), только  без
маркеров конца строк, вот пример:


                  ;  _.        " _
               ,d",<       __     щ ,
             _/r,f╓~r _lr  1░,l    ▌ т▀_ Э_
            ┌f▄, _%┼  /Д   │▐Й▐    $ Щ ▐h└╞r
           ╒l▐╒№▄▌тF;┘'      └       !  $Ъ ╢r
           b /!Д▌_Ы ▄▄ёё╤║╗▄█щ▄██#-╕╕╕▄_│ $▐▌
          Ї ╓l▐█ Д▐▌g_▄█╝▄█████▌ '')░A░╛ ▐ы█
           ,█r█Ї▄▐t█████████████t┌█▄██6├ r ██
          r╓█rF█№f▐█████████████ ў╣████ў $ █Ж
          ▌█▐r▐│▐r▐█████████████ ▐╣███ў' щ t▌
          Щ█ ▌│|█r▐████████▄,██▀ ў████ў  │▌▐
          │▐█  ]▌▌▐███████████m=╣████ў   │Д└
            ▌▌ $▌╘ ██████▀_++ _+ ║██ў+   █
           └J  ▐Д )╣██████▄__▀№┌ў██ў    ╒F/
             Ф_ █▄  ▀█████████Ц██▀'     т
              ▀*└╘_    ▀▀▀▀▀#▀"'
                  '


   Конверсия достаточно медленная, но  ка-
чественная. По всей  видимости  здесь  ис-
пользуется весь символьный набор!
   Еще есть такой  навороченный  текстовый
редактор Modern Word, доработанный Eterni-
ty Industry, в котором есть plugin, позво-
ляющий конвертить скрины, но  он  работает
только в регистрированной  версии, поэтому
желающие могут прикупить этот  редактор  у
авторов и конвертить, так сказать, "не от-
ходя от кассы".

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



Другие статьи номера:

Аперативчик - Об управлении в оболочке DEJA VU

Аперативчик - Номер вышел с опозданием на месяц.

Аперативчик - Халявы больше не будет.

Тема - Резервы #2. Перспектива.

Тема - О работе с электронным диском в IS-Dos.

Тема - Новый перекресток - кое-что из сложностей игры The Castle.

Тема - Принтер и ZX-Spectrum (система команд принтеров семейства Epson).

Капля припоя - Ода часам.

Капля припоя - Сканер v1.3.

Капля припоя - Disk protector v1.4 (схема).

SOFTWARE - Обзор новинок демок: Iris UltraDemo, Lazarus Trackmo, Russian Fields of Experiments, Pressure Trackmo.

SOFTWARE - Обзор новинок игр: Белый Орел, Leprekon,Козел,Puzzle (prerelease от Flash), Space, Translate Worlds,Devil-s Curse, Choppers: death match, Twilight: The Land of Shadows, Falen Angel, 12 Тайных книг, The Cezar,Chainick horror in Flat.

SOFTWARE - Обзор системок: ASCII Convertor v2.71 , Global Commander v1.31, BA v1.0, X-Copy.

SOFTWARE - Люди, как боги: сценарий к игре Elite III

SOFTWARE - О работе с программой для печати изображений XL-graph.

CODING - The Оптимизация - построение таблицы частоты повторения байтов.

CODING - Универсальный Player - Pro Tracker v3.31.

CODING - Недокументированные особенности процессора Z80.

CODING - Конверсия графики в текст-формат ASCII.

CODING - Как создать некопируемый сектор.

CODING - BUGS в Plaeyer-e Pro Tracker 3.x

ANOTHER WORLD - Процессор Pentium III.

ANOTHER WORLD - На стыке трех миров.

ANOTHER WORLD - Новости из мира Амиги.

ANOTHER WORLD - Мой выбор - ПЦ?.

Доска почета - Что мы думает о сцене.

Доска почета - Все на party!

Доска почета - О CD-ROM проекте из города Кемерово.

Семь и 1/2 - День дурака.

Семь и 1/2 - Нарочно не придумаешь: семь историй от продацов ZX софта.

Семь и 1/2 - Анекдоты.

Проба пера - Амига rulez или suxx?

Реклама - Реклама и объявления ...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Давайте познакомимся - Новые друзья: Рассказ BROM'а о себе. Интервью с Lom'ой.
Письма - Мнение IMPERIO о демках.
Cancer in Feces - Рецензия на новый номер Барнаульского журнала Funeral#2.

В этот день...   4 июля