APL programming - 如何将简单的矩阵转换成图片?

APL programming - How can I convert a simple matrix into a picture?

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

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

4 4 ⍴ 1 0 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 or an online tool将其转换为更流行的格式

根据您的矩阵,matrix←4 4 ⍴ 1 0 1 0

每个 RGB 像素都被编码为 base 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

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

∇ 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 联机使用,或通过键入 Bitmap 并按 F1 键脱机使用。