use std::fs::File;
use fits_well::{FitsReader, FitsWriter, Image, ImageData, ImageView, Scaling};
const IDENTITY: Scaling = Scaling {
bscale: 1.0,
bzero: 0.0,
blank: None,
};
fn main() -> fits_well::Result<()> {
let path = std::env::temp_dir().join("fits_well_image.fits");
let i16_image = Image {
shape: vec![4, 3],
#[rustfmt::skip]
samples: ImageData::I16(vec![
0, 1, 2, 3,
10, 11, 12, 13,
20, 21, 22, 23,
]),
scaling: IDENTITY,
};
let f32_image = Image {
shape: vec![2, 2],
samples: ImageData::F32(vec![1.5, -2.5, 3.5, -4.5]),
scaling: IDENTITY,
};
let mut writer = FitsWriter::new(File::create(&path)?);
writer.write_image(&i16_image)?;
writer.write_image(&f32_image)?;
writer.into_inner().sync_all()?;
println!("wrote {}", path.display());
let mut reader = FitsReader::open(File::open(&path)?)?;
let images = reader.image_indices();
println!("image HDUs: {images:?}");
let raw = reader.read_image(images[0])?;
println!("hdu 0: shape {:?}, {:?}", raw.shape, raw.bitpix);
if let ImageData::I16(pixels) = raw.decode() {
println!(" pixels {pixels:?}");
}
println!(" physical {:?}", raw.physical());
let mut scratch: Vec<u64> = Vec::new();
for &idx in &images {
match reader.read_image_view(idx, &mut scratch)? {
ImageView::I16(v) => println!("hdu {idx}: i16 view {v:?}"),
ImageView::F32(v) => println!("hdu {idx}: f32 view {v:?}"),
other => println!(
"hdu {idx}: {:?} view, {} samples",
other.bitpix(),
other.len()
),
}
}
Ok(())
}