18 个版本 (4 个破坏性更新)

0.4.2 2022年6月25日
0.3.1 2022年5月26日
0.0.6 2020年1月11日
0.0.4 2019年6月18日
0.0.1-a2019年3月31日

#529 in 图像

MIT 许可证

415KB
8K SLoC

image-canvas

提供基于 image-texel 的平面、彩色、可转换帧缓冲区。

工作进度:请不要在生产环境中使用。版本在 0.0.* 之上,API 可能会快速变化。尽管如此,我们将遵守语义版本控制,基于字节切片的接口不会删除,因为它们是库的卖点。

目标

缓冲区应无 IO,同时提供丰富的 API 以支持彩色图像缓冲区:即具有正确颜色空间的缓冲区,具有多种位深度的颜色和样本表示,可以在 CPU 上有效且高效地进行语义操作。提供一种通用语言来传递图像的一部分到其他程序。在某个时刻,我们将将其包装成 image 作为解码缓冲区。

对于 1.0 版本的目标是进一步提供所有平台和 ISA 组合下所有表示和转换功能完全相同的位(bit)-位可重复结果。不确定在达到最佳性能的同时是否可行,但我们会尝试。不依赖硬件的 texel/阴影/插值单元应该有一些好处,对吧?

这还不是最终版本,应被视为一个粗略的想法。

非目标

不解决 IO,可以在暴露的用于修改和引用帧部分的函数之上编写读取部分的绑定。

不提供 GPU 绑定(但使其易于转换布局并准备将其复制到纹理缓冲区)。

当前性能

基准测试测量的是将 128x128 像素图像转换为其他颜色和 texel 表示的过程。为了比较,下面的数字已按每 FullHD 图像(1920×1080 像素)的秒数进行缩放。这并不完全准确,因为存在缓存,但对于未来的参考还是有用的。

例如,在 2022-05-19 我们有

  • 将sRGB(u8)转换为sBGR(u8)耗时9.84ms/全高清 = 101 fps
  • 将sRGBa(u8)转换为sBGRa(u8)耗时8.06ms/全高清 = 124 fps
  • SrLab2(f32)转换为sRGBa(f32)耗时67.31ms/全高清 = 14.85 fps
  • 将sRGB(u8)转换为Oklab(u8)耗时188.58ms/全高清 = 5.3 fps
  • 将sRGB(f32)转换为Oklab(f32)耗时79.35ms/全高清 = 12.60 fps

依赖项