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