use tiff2::error::{TiffError, TiffResult};
fn row_major_to_col_major<T>(
data: &mut [Option<T>],
width: usize,
height: usize,
) -> TiffResult<Vec<T>> {
assert_eq!(
data.len(),
width * height,
"Data size must match dimensions"
);
let mut rearranged = Vec::with_capacity(data.len());
for old_i in 0..data.len() {
rearranged.push(
data[(old_i % height) * width + old_i / height]
.take()
.ok_or(TiffError::LimitsExceeded)?,
)
}
Ok(rearranged)
}
fn main() -> TiffResult<()> {
let height = 4;
let width = 5;
let mut data: Vec<Option<usize>> = (0..width * height).map(Some).collect();
println!("Original:");
for chunk in data.chunks(width) {
println!("{:?}", chunk);
}
let rearranged = row_major_to_col_major(&mut data, width, height)?;
println!("\nRearranged:");
for chunk in rearranged.chunks(height) {
println!("{:?}", chunk);
}
Ok(())
}