3个版本 (重大更改)

0.3.0 2023年10月7日
0.2.0 2023年8月15日
0.1.0 2023年6月24日

#402 in 图像

每月25次下载

MIT/Apache

165KB
4K SLoC

pixel_map Rust 库

crates.io docs MIT/Apache 2.0 build status

PixelMap 使用四叉树结构存储图像的像素数据。

概述

PixelMap 是MX四叉树实现,在根节点占据二维空间的一个区域,并向下细分为像素级别。映射中的每个像素可以存储一个泛型像素数据值,但树结构优化了常见值区域的存储。像素值必须是 Copy + PartialEq

项目状态:alpha。版本可能包含重大更改。

用法

安装

将crate添加到您的 Cargo.toml

cargo add pixel_map

创建像素映射

use pixel_map::PixelMap;

// Example pixel data
struct Color(u8, u8, u8);

let mut pixel_map = PixelMap::<Color>::new(
    &uvec2(1920, 1080), // size of the pixel map
    Color(0, 0, 0),     // initial value
    1,                  // pixel size
);

在PixelMap上绘图

// Set a pixel
pixel_map.set_pixel((11, 12), Color(255, 0, 0));

// Draw a line
pixel_map.draw_line(&ULine::new((500, 500), (600, 400)), Color(0, 255, 0));

// Draw a rectangle
pixel_map.draw_rect(&URect::from_corners(uvec2(200, 200), uvec2(300, 300)), Color(0, 0, 255));

// Draw a circle
pixel_map.draw_circle(&ICircle::new((500, 500), 100), Color(0, 0, 255));

导航PixelMap

// Visit all leaf nodes
pixel_map.visit(|node| {
    println!("region: {:?}, value: {:?}", node.region(), node.value());
});

// Visit all leaf nodes that have been modified
pixel_map.visit_dirty(|node| {
    println!("region: {:?}, value: {:?}", node.region(), node.value());
});
pixel_map.clear_dirty(true /*recurse*/);

功能

  • 设置单个像素值或绘制原始形状
    • 线条
    • 矩形
    • 圆形
  • 对两个像素映射执行布尔运算(即并集、交集、差集、异或)。
  • 通过脏标志检测树节点的更改。
  • 计算形状周围的轮廓线。

限制

  • 将像素数据加载和保存到各种图像格式超出了此crate的范围。但提供了填充像素数据以及遍历四叉树结构所需的基本操作。因此,这可以通过包含或伴随代码实现,具体取决于您的用例需求。

许可

pixel_map 是免费和开源的。此存储库中的所有代码均可选择以下任一许可方式

依赖项

约4MB
约107K SLoC