#edge #transparency #image #sprite #bevy

edges

一个用于获取具有透明度的图像中物体边缘的库

7 个版本

新版本 0.3.4 2024年8月13日
0.3.3 2024年7月7日
0.3.2 2024年5月12日
0.3.1 2024年3月5日
0.1.0 2024年3月2日

#557 in 游戏开发

Download history 162/week @ 2024-05-09 30/week @ 2024-05-16 11/week @ 2024-05-23 3/week @ 2024-05-30 6/week @ 2024-06-06 3/week @ 2024-06-13 7/week @ 2024-06-20 11/week @ 2024-06-27 155/week @ 2024-07-04 16/week @ 2024-07-11 1/week @ 2024-07-18 17/week @ 2024-07-25 16/week @ 2024-08-01 121/week @ 2024-08-08

每月下载量 155
bevy_collider_gen 中使用

MIT/Apache

42KB
282

Crates.io Crates.io MIT/Apache 2.0

edges

获取具有透明度的图像中物体的边缘。

支持的图像类型

  • 图像::DynamicImage
  • bevy::render::texture::Image(或者如果你愿意,bevy::prelude::Image

使用

use edges::Edges;
use std::path::Path;

let image = image::open(Path::new("assets/car.png"));
let edges = Edges::from(image.unwrap());
println!("{:#?}", edges.single_image_edge_translated());

工作原理

我受到了一个关于“marching squares”实现的编码火车(或者说,在帐篷里编码)的启发。因此,这个crate采用了一种“遍历所有值”的方法来查找边缘,即至少有一个空相邻像素的像素,但不是在原地绘制轮廓,而是仅记录所有实际像素坐标。为了确定“空”,我们对每个像素的所有字节进行按位或操作,在具有透明度的图像中,“空”是像素的零值。

之后,我们需要将坐标放入某种“绘图顺序”中,以便我们知道如何构造对象。为此,crate按照顺序收集所有彼此距离为1的像素。如果存在与现有组中任何像素距离大于1的像素,则该像素开始一个新的组。

许可证

此存储库中的所有代码均根据您的选择采用以下任一许可证的双重许可:

任选。

依赖关系

~7–46MB
~781K SLoC