我正在使用lodepng-rust编写一个生成图像的程序,希望使用像素而不是。我已经创建了一个结构体。
struct Pixel {r: u8, g: u8, b: u8}
我正在构建一个由数组元素组成的u8
数组。由于现在我正在手工制作数组,所以我需要手工制作另一个数组。有没有一种方法可以在编译时创建一个长度为像素数组三倍的数组?类似于:
let data: [u8; other_array.len()*3];
由于.len()
不是编译时常量,所以这种方式行不通。在这种情况下,运行时成本对我来说并不重要,但如果我能够让大小相关联,那么它会更加简洁(并且我将来可能需要性能)。
编辑:
我使用的解决方案基于Levans的答案。对于不手动初始化数组的人,请按照Levans的方法操作。 我手动初始化第一个数组,但将类型设置为使用pixel_count
中指定的长度,以便在编译时捕获错误的pixel_count
。我使用该常量创建第二个数组,然后断言长度具有正确的比例。我的最小示例如下:
struct Pixel {r: u8, g: u8, b: u8}
const pixel_count: usize = 4;
fn main() {
let pixel_data = [Pixel; pixel_count] = [
Pixel {r: 255, g: 0, b: 0},
Pixel {r: 0, g: 255, b: 0},
Pixel {r: 0, g: 0, b: 255},
Pixel {r: 0, g: 99, b: 99},
];
let mut data = [0u8; pixel_count*3];
assert_eq!(pixel_data.len()*3, data.len());
}
pixel_number
改成pixel_count
,这样它们就匹配了。 无论如何,使用assert!
让我使用的方法完美了,谢谢! - porglezompconst
。谢谢! - Levans