#buffer #layout #interface #allocated #suitable #data-structures #texel

image-texel

适用于图像数据的类型和分配的缓冲区

7 个版本

0.3.1 2022年11月2日
0.3.0 2022年6月9日
0.2.1 2022年5月26日
0.1.2 2022年5月22日

#814图像


image-canvas 中使用

MIT 许可证

175KB
3K SLoC

image-texel docs.rs: image-texel Build Status

一个适合图像数据的分配缓冲区。与所有样本的 Vec 相比,它限制了可能的数据类型,但另一方面专注于更高效的接口来转换数据或重新排列内容。

它是什么

提供的缓冲区类型提供了许多开箱即用的实用操作,或者它们可以用作更具体接口构建的内部结构。

  • 作为提供转换的透明图像结构的内部类型。
  • 作为接口中特定形状图像数据的标准形式。
  • 作为附加其布局的图像数据的引用。
  • 作为优化转换库的基础。
  • 作为FFI接口的机制。

为什么

经过一些讨论后,得出结论,在非常有限的情况下,可能没有安全的重解释方式来为不同的Vec<T>重新分配内存,除非在非常有限的情况下。这包括在逻辑像素结构中分组样本,即使这些样本被注释为#[repr(C)]或类似。这几乎不是Vec<_>的错,因为图像和必要的二进制数据的转换远非通用,但Vec必须如此。

¹在Rust 1.61中略有放宽,其中一些类型转换,如从Vec<[u8; 3]>Vec<u8>现在是允许的,在有限的情况下也允许反向转换。这可能为我们提供了一个很好的‘出口’,以在标准向量之间进行零分配转换。但这仍然远不能满足大多数高性能需求。

它不是什么

它不是针对提供nd-algebra或其他矩阵风格操作进行优化的。这首先保持了实现复杂度低,允许其他实现细节,并分离关注点。如果你仍然发现它在这些用途上很有用,请放心,尽管我们可能不会接受仅为此用途引入额外复杂性的PR,但我们认为这非常酷。相反,使用代码和免费许可证来满足其他需求。

待办事项

  • 在保证缓冲区和切片类型对齐的情况下,安全地包装SIMD迭代/转换/映射操作。

依赖项

~135KB