如何使用 Swift 跨平台编写 png 图片
How to write png images using Swift cross platform
我在写一点cross-platform raytracer in Swift。目前我被困在写出生成的图像的地方。我搜索了几天图书馆,但我只找到了以下内容:
- 使用 UIImagePNGRepresentation 编写 PNG:不,那只是 iOS
- lodepng - 一个仅由 2 个文件(.c 和 .h)组成的轻量级 c 库:看起来很有前途,但它不会 link 我的 swift 程序 -很失望
- libpng:完整的 png 库对我来说太多了。
图像输出是 swift 中编写的初始光线跟踪算法的最后一块砖。如果有人知道如何实现这一点,我将非常感激。也许有人可以提供有用的建议来解决这个问题。
另一种选择是找到一种非常简单的图像格式,或者存在一个库,或者我可以为自己编写一个 Swift 算法。
我会使用 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 [=11=] [=11=] [=11=] [=11=] [=11=]
0000020 [=11=] [=11=] [=11=] [=11=] 377 [=11=] 377 [=11=] [=11=] [=11=] [=11=] 377 177 [=11=] [=11=] [=11=]
0000040 [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] 377 177 [=11=] [=11=] [=11=] 377
0000060 [=11=] 377 [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=]
我在写一点cross-platform raytracer in Swift。目前我被困在写出生成的图像的地方。我搜索了几天图书馆,但我只找到了以下内容:
- 使用 UIImagePNGRepresentation 编写 PNG:不,那只是 iOS
- lodepng - 一个仅由 2 个文件(.c 和 .h)组成的轻量级 c 库:看起来很有前途,但它不会 link 我的 swift 程序 -很失望
- libpng:完整的 png 库对我来说太多了。
图像输出是 swift 中编写的初始光线跟踪算法的最后一块砖。如果有人知道如何实现这一点,我将非常感激。也许有人可以提供有用的建议来解决这个问题。
另一种选择是找到一种非常简单的图像格式,或者存在一个库,或者我可以为自己编写一个 Swift 算法。
我会使用 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 [=11=] [=11=] [=11=] [=11=] [=11=]
0000020 [=11=] [=11=] [=11=] [=11=] 377 [=11=] 377 [=11=] [=11=] [=11=] [=11=] 377 177 [=11=] [=11=] [=11=]
0000040 [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] 377 177 [=11=] [=11=] [=11=] 377
0000060 [=11=] 377 [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=] [=11=]