【问题标题】:How to write png images using Swift cross platform如何使用 Swift 跨平台编写 png 图像
【发布时间】:2016-08-17 21:55:44
【问题描述】:

我正在写一点cross-platform raytracer in Swift。目前我被困在写出生成的图像的地方。我现在搜索了几天的图书馆,但我发现的只有以下内容:

  • 使用UIImagePNGRepresentation 编写PNG:不,仅适用于iOS
  • lodepng - 一个仅包含 2 个文件(.c 和 .h)的轻量级 c 库:看起来很有前途,但它不会与我的 swift 程序链接 - 非常令人失望
  • libpng: 完整的 png 库,这对我来说太过分了。

图像输出是用 swift 编写的初始光线追踪算法的最后一块砖。如果有人知道如何做到这一点,我将非常感激。也许有人可以提供有用的建议来解决这个问题。

另一种选择是找到一个非常简单的图像格式,它要么存在一个库,要么我可以为自己编写一个 Swift 算法。

【问题讨论】:

  • “不会链接到我的 Swift 程序”是什么意思?
  • 我可以从 lodepng 库中调用 C 函数。编译器没有问题。但是在链接时,链接器抱怨它找不到 C 方法调用的符号。我还看到编译器在派生/中间体文件夹中生成了 .o 文件。有什么想法吗?

标签: swift image png cross-platform static-libraries


【解决方案1】:

我会使用 netpbm 这种普通格式,然后使用第三方转换器(例如 ImageMagick 或 GraphicsMagick)将其转换为最终形式。

您可以使用 netpbm 库,也可以自己编写像素。

格式描述here

典型的 PPM 文件如下所示,其中“P3”幻数表示它是 ASCII 格式:

$ cat p3.ppm
P3 4 4 255
  0  0  0    0  0  0    0  0  0   255  0 255
  0  0  0    0 255 127  0  0  0    0  0  0
  0  0  0    0  0  0    0 255 127  0  0  0
255  0 255   0  0  0    0  0  0    0  0  0

如果您愿意,可以编写“P6”格式的 PPM 文件,其中 像素是原始字节;

$ od -c p6.ppm
0000000   P   6  \n   4       4  \n   2   5   5  \n  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0 377  \0 377  \0  \0  \0  \0 377 177  \0  \0  \0
0000040  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0 377 177  \0  \0  \0 377
0000060  \0 377  \0  \0  \0  \0  \0  \0  \0  \0  \0

【讨论】:

  • 谢谢,我想我会继续这样做,直到找到 PNG 的库:-)
  • 我认为投反对票是因为我没有具体说明如何使用 swift 进行投票。格式很简单,如果你能写一个“hello world”程序,你就可以写一个p3.ppm。我用 Fortran、vi、echo、bash “这里的文档”等编写它们。我用 StackExchange markdown 编辑器编写了这里的示例,然后用 GraphicsMagick 将其转换为 P6。
猜你喜欢
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2013-01-22
  • 2012-02-23
相关资源
最近更新 更多