如何保存Blend画布?使用image/imageproc绘制混合三角形的保存问题
解决Blend画布无法保存的问题
你只需要直接访问Blend包装的内部RgbaImage实例即可调用save方法——因为Blend是元组结构体,通过.0就能取出内部的图像对象。
修改后的代码如下:
use image::{Rgba, RgbaImage}; use imageproc::drawing; use imageproc::drawing::Blend; use imageproc::point::Point; struct Triangle([Point<i32>; 3]); fn main() { let triangle = Triangle([ Point { x: 0, y: 0 }, Point { x: 100, y: 400 }, Point { x: 400, y: 100 }, ]); let mut image = Blend(RgbaImage::new(400, 400)); drawing::draw_polygon_mut(&mut image, &triangle.0, Rgba([255, 255, 0, 255])); drawing::draw_polygon_mut(&mut image, &triangle.0, Rgba([0, 0, 255, 255])); // 取出Blend内部的RgbaImage调用save image.0.save("test.png").unwrap(); }
原理很简单:Blend只是为实现混合绘制逻辑的包装器,它本身并没有继承RgbaImage的方法,必须直接操作它包裹的原始图像实例才能完成保存。修改后,黄色和蓝色的重叠三角形会混合成白色,生成的图片也能正常保存。
内容的提问来源于stack exchange,提问作者Panic
相关产品推荐
相关产品推荐

