Учитывая вашу матрицу, matrix←4 4 ⍴ 1 0 1 0
Каждый пиксель RGB кодируется как одно целое число в базе 256: cb ← matrix × 256 ⊥ 255 255 255
Теперь мы создаем растровое изображение: 'bm' ⎕WC 'Bitmap' ('CBits' cb)
И создайте содержимое соответствующего PNG: png ← bm.MakePNG
Давайте создадим собственный (т.е. не-APL) контейнерный файл и перехватим его номер связи: tn ← '\tmp\pic.png' ⎕NCREATE ¯1
Добавлениеdata: png ⎕NAPPEND tn
Разархивирование файла: ⎕NUNTIE tn
Вот весь код вместе как программа, которая принимает имя файла в качестве левого аргумента и маску в качестве правого аргумента:
∇ filename PNG matrix ; cb ; bm ; png ; tn
cb ← matrix × 256 ⊥ 255 255 255
'bm' ⎕WC 'Bitmap' ('CBits'cb)
png ← bm.MakePNG
tn ← filename ⎕NCREATE ¯1
png ⎕NAPPEND tn
⎕NUNTIE tn
∇
Однако вам может понадобиться немного изменить масштаб изображения, чтобы на самом деле его увидеть, поэтому давайте определим вспомогательную функцию, которая выполняет масштабирование:
Scale ← { ⍺ / ⍺ ⌿ ⍵ }
Теперь давайте попробуем:
'\tmp\bigpic.png' PNG 100 Scale 3 3 ⍴ 1 0 1 1 1 0 0 0 0
]Open \tmp\bigpic.png
Вот программа, которая вместо этого отображает изображение в отдельном окне:
∇ Show matrix ; cb ; bm
cb ← matrix × 256 ⊥ 255 255 255
'bm' ⎕WC 'Bitmap' ('CBits'cb)
'f' ⎕WC 'Form' ('Coord' 'ScaledPixel') ('Size' (⍴ matrix))
'f.img' ⎕WC 'Image' ('Points' 0 0) ('Picture' bm)
∇
Итак, мы можем сделать:
Show 100 Scale 3 3 ⍴ 1 0 1 1 1 0 0 0 0
Полная документация для объекта Bitmap доступна онлайн по электронной почтевведите ]Help Bitmap
или в автономном режиме, набрав Bitmap
и нажав клавишу F1.