#绘图 #2D图形 #图像 #图形 #2D

tinydraw

Rust中用于2D绘图的轻量级库

2个版本

0.1.1 2023年2月16日
0.1.0 2023年2月16日

#107渲染

MIT 许可证

120KB
1K SLoC

tinydraw-rs

tinydraw 是一个用于Rust中2D绘图的轻量级库


这是一个用于在图像上绘制基本、抗锯齿形状的简单crate,使用纯Rust编写。包括读取和将图像导出为PNG或字节的函数(依赖项)。

文档

支持的形状

  • 线条
  • 矩形
  • 圆形
  • 椭圆形

示例

use tinydraw::ImageRGB8;

fn main() { 
    let background_color: [u8; 3] = [255, 155, 0];
    let mut image: ImageRGB8 = ImageRGB8::new(640, 360, background_color);
  
    image.draw_line(0, 0, 639, 359, [255, 255, 255], 1, 1.0);
    image.draw_line(0, 359, 639, 0, [255, 255, 255], 1, 1.0);
    image.draw_rectangle(0, 0, 639, 359, [255, 255, 255], 3, 1.0);
    image.draw_ellipse(319, 179, 300, 150, [0, 0, 0], 0, 0.5);
    image.draw_circle(149, 179, 30, [255, 255, 255], 0, 1.0);
    image.draw_circle(149, 179, 20, [0, 0, 0], 0, 1.0);
    image.draw_circle(489, 179, 30, [255, 255, 255], 0, 1.0);
    image.draw_circle(489, 179, 20, [0, 0, 0], 0, 1.0);
    image.draw_ellipse(319, 90, 80, 30, [255, 255, 255], 0, 1.0);
    image.draw_ellipse(319, 90, 60, 20, [0, 0, 0], 0, 1.0);
  
    image.to_png("image.png").unwrap();
}

此代码生成以下图像

image

限制

  • 厚度大于1的线条不适用于
    • 线条
    • 圆形
    • 椭圆形
  • 超出图像边界的坐标不适用于
    • 矩形
    • 圆形
    • 椭圆形
  • 目前仅支持8位深度RGB图像

依赖项

bytemuck(读取、导出字节)

png(读取、导出PNG)

开发

我打算修复限制并可能在将来添加更多形状。这取决于我的空闲时间和对这个crate的兴趣。如果您遇到错误或有任何建议,请随时提出问题。如果您想贡献,请随时提出拉取请求。

参考

维基百科 - Xiaolin Wu的线条算法

GeeksforGeeks - 抗锯齿线条 | Xiaolin Wu的算法

Stephan Brumme - 绘制抗锯齿圆和椭圆

David Moksha - 从Xiaolin Wu的概念快速、抗锯齿圆和椭圆

依赖项

~1MB
~22K SLoC