Skip to content

Commit 0c75f56

Browse files
committed
πŸ™ Fixed negative orgin subimage panic.
1 parent 092ad95 commit 0c75f56

4 files changed

Lines changed: 23 additions & 2 deletions

File tree

β€Žsrc/image.rsβ€Ž

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,14 @@ impl Image {
593593
/// Returns a new image that is a subimage of this image within
594594
/// the supplied bounds.
595595
pub fn subimage(&self, region: Rect<i32>) -> anyhow::Result<Image> {
596+
let bounds = Rect {
597+
origin: Point::zero(),
598+
size: self.size,
599+
}
600+
.into();
601+
let Some(region) = region.intersection(&bounds) else {
602+
anyhow::bail!(ImageError::OutOfBounds)
603+
};
596604
let x = region.min_x() as u32;
597605
let y = region.min_y() as u32;
598606
let width = region.width() as u32;

β€Žtests/image_tests.rsβ€Ž

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,25 @@ mod tests {
135135
#[test]
136136
fn subimage() {
137137
let image = Image::open("tests/images/avatar.png").unwrap();
138-
let expected_image = Image::open("tests/images/avatar_subimage.png").unwrap();
138+
let expected_image = Image::open("tests/images/avatar-subimage.png").unwrap();
139139

140140
let region = Rect::new(2, 7, 13, 10);
141141
let result = image.subimage(region).unwrap();
142142

143-
// result.save("/tmp/avatar_subimage.png").unwrap();
143+
// result.save("/tmp/avatar-subimage.png").unwrap();
144+
145+
assert!(result.appears_equal_to(&expected_image));
146+
}
147+
148+
#[test]
149+
fn negative_subimage() {
150+
let image = Image::open("tests/images/avatar.png").unwrap();
151+
let expected_image = Image::open("tests/images/avatar-negative-subimage.png").unwrap();
152+
153+
let region = Rect::new(-2, 7, 13, 10);
154+
let result = image.subimage(region).unwrap();
155+
156+
// result.save("/tmp/avatar-negative-subimage.png").unwrap();
144157

145158
assert!(result.appears_equal_to(&expected_image));
146159
}
383 Bytes
Loading

0 commit comments

Comments
Β (0)