Add additional pixmap methods for allocation management
diff --git a/sparse_strips/vello_api/src/pixmap.rs b/sparse_strips/vello_api/src/pixmap.rs
index c95a569..d856ef4 100644
--- a/sparse_strips/vello_api/src/pixmap.rs
+++ b/sparse_strips/vello_api/src/pixmap.rs
@@ -52,6 +52,34 @@
         }
     }
 
+    /// Resizes the pixmap container to the given width and height; this does not resize the
+    /// contained image.
+    ///
+    /// If the pixmap buffer has to grow to fit the new size, those pixels are set to transparent
+    /// black. If the pixmap buffer is larger than required, the buffer is truncated and its
+    /// reserved capacity is unchanged.
+    pub fn resize(&mut self, width: u16, height: u16) {
+        self.width = width;
+        self.height = height;
+        self.buf.resize(
+            usize::from(width) * usize::from(height),
+            PremulRgba8::from_u32(0),
+        );
+    }
+
+    /// Shrink the capacity of the pixmap buffer to fit the pixmap's current size.
+    pub fn shrink_to_fit(&mut self) {
+        self.buf.shrink_to_fit();
+    }
+
+    /// The reserved capacity (in pixels) of this pixmap.
+    ///
+    /// When calling [`Pixmap::resize`] with a `width * height` smaller than this value, the pixmap
+    /// does not need to reallocate.
+    pub fn capacity(&self) -> usize {
+        self.buf.capacity()
+    }
+
     /// Return the width of the pixmap.
     pub fn width(&self) -> u16 {
         self.width