【问题标题】:APL programming - How can I convert a simple matrix into a picture?APL 编程 - 如何将简单的矩阵转换为图片?
【发布时间】:2019-05-04 14:30:43
【问题描述】:

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

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

4 4 ⍴ 1 0 1 0

谢谢!

【问题讨论】:

    标签: matrix bitmap apl dyalog


    【解决方案1】:

    给定你的矩阵,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 键离线获得。

    【讨论】:

    • 哇——太棒了!谢谢@Adám,感谢您的时间和精力。我也想问关于缩放的问题,但你打败了我。
    【解决方案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'
    

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

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多