rasterization 0.2.0

Iterator and iterator adapters for rasterizing a circle and its parts.
Documentation
use image::{ImageResult, Rgb, RgbImage};
use rasterization::{DirectionGradient, Rasterization, SemicircleFilled};

fn main() -> ImageResult<()> {
    use crate::DirectionGradient::*;
    let radius = 256_usize;
    let width = (radius / 4 * 9) as u32;
    let height = (radius / 4 * 9) as u32;
    let center_x = (width / 2) as i32;
    let center_y = (height / 2) as i32;
    let offset = (radius as f32 * 1.414).ceil() as i32;
    let size = offset as usize;
    let grad = colorous::CUBEHELIX;
    let mut img = RgbImage::from_pixel(width, height, Rgb([255, 255, 255]));
    let iter = SemicircleFilled::<i32>::new(radius);
    iter.clone()
        .semicircle_top()
        .gradient(offset, size, BottomRight(grad))
        .chain(
            iter.clone()
                .third_quadrant(0)
                .gradient(offset, size, TopRight(grad)),
        )
        .chain(
            iter.fourth_quadrant(0)
                .gradient(offset, size, TopRight(grad)),
        )
        .for_each(|(x, y, color)| {
            img.put_pixel((x + center_x) as u32, (y + center_y) as u32, color.into());
        });

    img.save("gradient.png")?;
    Ok(())
}