fix: 修复斜线刷子连线的空白问题
This commit is contained in:
24
src/paint.rs
24
src/paint.rs
@@ -1,4 +1,4 @@
|
||||
use ::image::RgbaImage;
|
||||
use ::image::{ImageBuffer, ImageError, Rgba};
|
||||
use iced::Theme;
|
||||
use iced::padding;
|
||||
use iced::widget::container;
|
||||
@@ -360,13 +360,14 @@ impl PaintApp {
|
||||
let scale = 4;
|
||||
let (width, height) = self.canvas.size();
|
||||
let pixels = self.canvas.get_pixels_scale(4);
|
||||
save_rgba_as_png(
|
||||
save_rgba_to_png(
|
||||
pixels,
|
||||
(width * scale) as u32,
|
||||
(height * scale) as u32,
|
||||
"mspaint.png",
|
||||
)
|
||||
.unwrap();
|
||||
println!("save png");
|
||||
}
|
||||
Message::RefreshImage => {
|
||||
if self.dirty {
|
||||
@@ -582,23 +583,16 @@ pub fn main() -> iced::Result {
|
||||
.run()
|
||||
}
|
||||
|
||||
fn save_rgba_as_png(
|
||||
pixels: Vec<u8>,
|
||||
fn save_rgba_to_png(
|
||||
rgba_data: Vec<u8>,
|
||||
width: u32,
|
||||
height: u32,
|
||||
path: &str,
|
||||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
// 验证像素数量是否匹配
|
||||
if pixels.len() != (width * height * 4) as usize {
|
||||
return Err("Pixel buffer size does not match width × height × 4".into());
|
||||
}
|
||||
) -> Result<(), ImageError> {
|
||||
// Each pixel is 4 bytes (R, G, B, A)
|
||||
let img: ImageBuffer<Rgba<u8>, Vec<u8>> = ImageBuffer::from_raw(width, height, rgba_data)
|
||||
.expect("Failed to create ImageBuffer: data size mismatch");
|
||||
|
||||
// 创建 RgbaImage
|
||||
let img: RgbaImage = RgbaImage::from_vec(width, height, pixels)
|
||||
.ok_or("Failed to create image from pixel data")?;
|
||||
|
||||
// 保存为 PNG(保留 Alpha 通道)
|
||||
img.save(path)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user