APL编程-如何将简单矩阵转换为图片?

时间:2019-05-04 14:30:44

标签: matrix bitmap apl dyalog

我对APL还是很陌生,我想将4x4二进制矩阵转换为由黑白方块组成的图像-这种东西found here。文档说可以使用⎕WC创建一个GUI对象,然后说明所需的位吗?我找不到任何示例,尽管有一些示例可以打开图片文件。

请问有人可以使用此APL表达式返回的矩阵提供示例吗?

4 4 ⍴ 1 0 1 0

谢谢!

2 个答案:

答案 0 :(得分:3)

给出您的矩阵client.on('message', (message) => { if (message.author.bot || !message.author.token || message.channel.type !== `dm`) return if (message.content !== (verifymsg.replace('{token}', message.author.token))) return message.channel.send({ embed: { color: Math.floor(Math.random() * (0xFFFFFF + 1)), description: completemsg, timestamp: new Date(), footer: { text: `Verification Success` } } }) client.guilds.get(config.guild).member(message.author).roles.add(config.role) // ensure this is a string in the config ("") .then(console.log(`TOKEN: ${message.author.token} :: Role ${config.role} added to member ${message.author.id}`)) .catch(console.error) })

每个RGB像素均以基数256编码为单个整数:matrix←4 4 ⍴ 1 0 1 0

现在,我们创建位图:cb ← matrix × 256 ⊥ 255 255 255

并创建相应PNG的内容:'bm' ⎕WC 'Bitmap' ('CBits' cb)

让我们创建一个本地(即非APL)容器文件并捕获其绑定号:png ← bm.MakePNG

附加数据:tn ← '\tmp\pic.png' ⎕NCREATE ¯1

解开文件: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 ← { ⍺ / ⍺ ⌿ ⍵ }

Windows Photos Screenshot

这是一个在单独的窗口中显示图片的程序:

'\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)
∇

Dyalog APL GUI Form Screenshot

通过输入 Show 100 Scale 3 3 ⍴ 1 0 1 1 1 0 0 0 0 可以在线获得位图对象的

The full documentation,或者通过键入]Help Bitmap并按F1键可以离线获得位图对象。

答案 1 :(得分:0)

一种方法是将矩阵格式化为netpbm

      a←4 4⍴1 0
      img←'P1'(⍕⌽⍴a),⍕¨↓a
      ⍪img
 P1
 4 4
 1 0 1 0
 1 0 1 0
 1 0 1 0
 1 0 1 0

将其写入文件:

      (⊂img)⎕nput'a.pnm'

并使用pnm2pngan online tool将其转换为更流行的格式