Skip to content

Commit ff5a34d

Browse files
committed
fix: extra resize on bitmap
1 parent bda2462 commit ff5a34d

File tree

1 file changed

+19
-14
lines changed
  • packages/canvas/src-native/canvas-native/canvas-core/src/common

1 file changed

+19
-14
lines changed

packages/canvas/src-native/canvas-native/canvas-core/src/common/image_bitmap.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use core::convert::{From, Into};
22

3-
use image as image_rs;
43
use skia_safe::{EncodedImageFormat, Point, RCHandle, Rect};
54

65
use crate::common::context::image_asset::ImageAsset;
@@ -224,22 +223,28 @@ pub(crate) fn create_image_bitmap(
224223
.canvas()
225224
.draw_image(&image, (source_rect.x(), source_rect.y()), Some(&paint));
226225

227-
let resize_info = image_info.with_dimensions((out_width as i32, out_height as i32));
228226
let image = surface.image_snapshot();
227+
let data;
228+
if image.width() != out_width && image.height() != out_height {
229+
let resize_info = image_info.with_dimensions((out_width as i32, out_height as i32));
229230

230-
let mut bytes = vec![0_u8; (out_width * out_height * 4.) as usize];
231-
let mut pixel_map = skia_safe::Pixmap::new(
232-
&resize_info,
233-
bytes.as_mut_slice(),
234-
(out_width * 4.) as usize,
235-
);
236-
image.scale_pixels(
237-
&pixel_map,
238-
ImageBitmapResizeQuality::from(resize_quality).to_quality(),
239-
None,
240-
);
231+
let mut bytes = vec![0_u8; (out_width * out_height * 4.) as usize];
232+
let mut pixel_map = skia_safe::Pixmap::new(
233+
&resize_info,
234+
bytes.as_mut_slice(),
235+
(out_width * 4.) as usize,
236+
);
237+
image.scale_pixels(
238+
&pixel_map,
239+
ImageBitmapResizeQuality::from(resize_quality).to_quality(),
240+
None,
241+
);
242+
243+
data = pixel_map.encode(EncodedImageFormat::PNG, 100);
244+
} else {
245+
data = image.encode_to_data(EncodedImageFormat::PNG);
246+
}
241247

242-
let data = pixel_map.encode(EncodedImageFormat::PNG, 100);
243248
if let Some(data) = data {
244249
output.load_from_bytes(data.as_bytes());
245250
};

0 commit comments

Comments
 (0)