Sub-pixel precision light spot rendering library for astronomy and video tracking applications.
```rust use planetarium::{Canvas, SpotShape};
// Draw on a square 256x256 pixel canvas. let mut c = Canvas::new(256, 256);
// Define a round spot shape with diffraction radius of 2.5 pixels. let shape = SpotShape::default().scale(2.5);
// Add some spots at random positions with varying shape size // and peak intensity. let spot1 = c.addspot((100.3, 130.8), shape, 0.5); let spot2 = c.addspot((80.6, 200.2), shape.scale(0.5), 0.9);
// Note: Out of range position coordinates and peak intensities are fine. // The resulting spot image is clipped into the canvas rectangle. // Peak intensity > 1.0 leads to saturation to the maximum pixel value. let spot3 = c.add_spot((256.1, 3.5), shape.scale(10.0), 1.1);
// Set the canvas background pixel value. c.set_background(100);
// Clear the canvas and paint the light spots. c.draw();
// Access the rendered image data as a linear pixel array. let image_pixbuf = c.pixels();
// Get pixel at x = 100, y = 200. let (x, y) = (100, 200); let (imagewidth, imageheight) = c.dimensions(); let valxy = imagepixbuf[(y * imagewidth + x) as usize]; ```
The Canvas
object supports image export to RAW and PNG file formats.
Both 8-bit and 16-bit PNG sample formats are supported.
Export to PNG formats requires the default png
feature to be enabled.
```rust use planetarium::{Canvas, ImageFormat};
let mut c = Canvas::new(256, 256); c.clear();
// Export to a 8-bit gamma-compressed grayscale PNG image. let png8bppbytes = c.export_image(ImageFormat::PngGamma8Bpp).unwrap();
// Export to a 16-bit linear light grayscale PNG image. let png16bppbytes = c.export_image(ImageFormat::PngLinear16Bpp).unwrap(); ```