use agg::PixelData; use std::path::PathBuf; use std::path::Path; use std::env; type PixRgb8 = agg::Pixfmt; use agg::Gray8; use agg::PixfmtAlphaBlend; fn ppm_names() -> (PathBuf,PathBuf) { let progname = env::args().next().unwrap(); let progname = Path::new(&progname); let mut base = progname.file_stem().unwrap().to_string_lossy().into_owned(); let n = base.rfind("-").unwrap(); base.truncate(n); let ppm = Path::new(&base).with_extension("ppm"); let test = Path::new("tests").join(ppm.clone()); (ppm, test) } #[test] fn component_rendering_128() { let alpha = 128; let (w, h) = (320, 320); let pixf = agg::Pixfmt::::new(w, h); let mut ren_base = agg::RenderingBase::new(pixf); ren_base.clear(agg::Rgba8::new(255,255,255,255)); let g8 = Gray8::new_with_alpha(0,alpha); let mut er = agg::Ellipse::new(); let mut eb = agg::Ellipse::new(); let mut eg = agg::Ellipse::new(); let w2 = (w/2) as f64; let h2 = (h/2) as f64; er.init(w2 - 0.87*50.0, h2 - 0.5*50., 100., 100., 100); eg.init(w2 + 0.87*50.0, h2 - 0.5*50., 100., 100., 100); eb.init(w2, h2 + 50., 100., 100., 100); let mut ras = agg::RasterizerScanline::new(); { let pfr = PixfmtAlphaBlend::::new(&mut ren_base, 0); let mut rbr = agg::RenderingBase::new(pfr); ras.add_path(&er); agg::render_scanlines_aa_solid(&mut ras, &mut rbr, g8); } { let pfg = PixfmtAlphaBlend::::new(&mut ren_base, 1); let mut rbg = agg::RenderingBase::new(pfg); ras.add_path(&eg); agg::render_scanlines_aa_solid(&mut ras, &mut rbg, g8); } { let pfb = PixfmtAlphaBlend::::new(&mut ren_base, 2); let mut rbb = agg::RenderingBase::new(pfb); ras.add_path(&eb); agg::render_scanlines_aa_solid(&mut ras, &mut rbb, g8); } let (ppm, test) = ppm_names(); agg::ppm::write_ppm(&ren_base.pixeldata(), w, h, ppm.clone()).unwrap(); agg::ppm::compare_ppm(ppm, test); }