image_on_image/
image_on_image.rs1use tiny_skia::*;
2
3fn main() {
4 let triangle = create_triangle();
5
6 let mut pixmap = Pixmap::new(400, 400).unwrap();
7
8 let now = std::time::Instant::now();
9
10 let mut paint = PixmapPaint::default();
11 paint.quality = FilterQuality::Bicubic;
12
13 pixmap.draw_pixmap(
14 20,
15 20,
16 triangle.as_ref(),
17 &paint,
18 Transform::from_row(1.2, 0.5, 0.5, 1.2, 0.0, 0.0),
19 None,
20 );
21
22 println!(
23 "Rendered in {:.2}ms",
24 now.elapsed().as_micros() as f64 / 1000.0
25 );
26
27 pixmap.save_png("image.png").unwrap();
28}
29
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); pixmap
59}