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 中使用
175KB
3K SLoC
image-texel
一个适合图像数据的分配缓冲区。与所有样本的 Vec
相比,它限制了可能的数据类型,但另一方面专注于更高效的接口来转换数据或重新排列内容。
它是什么
提供的缓冲区类型提供了许多开箱即用的实用操作,或者它们可以用作更具体接口构建的内部结构。
- 作为提供转换的透明图像结构的内部类型。
- 作为接口中特定形状图像数据的标准形式。
- 作为附加其布局的图像数据的引用。
- 作为优化转换库的基础。
- 作为FFI接口的机制。
为什么
经过一些讨论后,得出结论,在非常有限的情况下,可能没有安全的重解释方式来为不同的Vec<T>
重新分配内存,除非在非常有限的情况下。这包括在逻辑像素结构中分组样本,即使这些样本被注释为#[repr(C)]
或类似。这几乎不是Vec<_>
的错,因为图像和必要的二进制数据的转换远非通用,但Vec
必须如此。
¹在Rust 1.61中略有放宽,其中一些类型转换,如从Vec<[u8; 3]>
到Vec<u8>
现在是允许的,在有限的情况下也允许反向转换。这可能为我们提供了一个很好的‘出口’,以在标准向量之间进行零分配转换。但这仍然远不能满足大多数高性能需求。
它不是什么
它不是针对提供nd-algebra或其他矩阵风格操作进行优化的。这首先保持了实现复杂度低,允许其他实现细节,并分离关注点。如果你仍然发现它在这些用途上很有用,请放心,尽管我们可能不会接受仅为此用途引入额外复杂性的PR,但我们认为这非常酷。相反,使用代码和免费许可证来满足其他需求。
待办事项
- 在保证缓冲区和切片类型对齐的情况下,安全地包装SIMD迭代/转换/映射操作。
依赖项
~135KB