2

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

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

4 4 ⍴ 1 0 1 0

谢谢!

4

2 回答 2

3

给定你的矩阵,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)容器文件并获取它的 tie number: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

Windows 照片截图

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

∇ 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

Dyalog APL GUI 表单截图

位图对象的完整文档]Help Bitmap可以通过输入在线获得,也可以通过键入Bitmap并按 F1 键离线获得。

于 2019-05-04T22:08:37.907 回答
2

一种方法是将矩阵格式化为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在线工具将其转换为更流行的格式

于 2019-05-04T15:26:21.853 回答