我对APL还是很陌生,我想将4x4二进制矩阵转换为由黑白方块组成的图像-这种东西found here。文档说可以使用⎕WC
创建一个GUI对象,然后说明所需的位吗?我找不到任何示例,尽管有一些示例可以打开图片文件。
请问有人可以使用此APL表达式返回的矩阵提供示例吗?
4 4 ⍴ 1 0 1 0
谢谢!
答案 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 ← { ⍺ / ⍺ ⌿ ⍵ }
这是一个在单独的窗口中显示图片的程序:
'\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
可以在线获得位图对象的 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'
并使用pnm2png或an online tool将其转换为更流行的格式