【发布时间】:2019-05-04 14:30:43
【问题描述】:
我是 APL 的新手,我想将 4x4 二进制矩阵转换为由黑白方块组成的图像 - 类似于 found here。文档说可以使用⎕WC 创建一个 GUI 对象,然后说明所需的位?虽然有一些用于打开图片文件的示例,但我找不到任何示例。
有人可以提供一个使用此 APL 表达式返回的矩阵的示例吗?
4 4 ⍴ 1 0 1 0
谢谢!
【问题讨论】:
我是 APL 的新手,我想将 4x4 二进制矩阵转换为由黑白方块组成的图像 - 类似于 found here。文档说可以使用⎕WC 创建一个 GUI 对象,然后说明所需的位?虽然有一些用于打开图片文件的示例,但我找不到任何示例。
有人可以提供一个使用此 APL 表达式返回的矩阵的示例吗?
4 4 ⍴ 1 0 1 0
谢谢!
【问题讨论】:
给定你的矩阵,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
追加数据: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 对象的The full documentation 可通过输入]Help Bitmap 在线获得,或通过输入Bitmap 并按F1 键离线获得。
【讨论】:
一种方法是将矩阵格式化为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 将其转换为更流行的格式
【讨论】: