| Crates.io | easyx |
| lib.rs | easyx |
| version | 0.1.3 |
| created_at | 2026-01-11 06:29:58.746032+00 |
| updated_at | 2026-01-12 16:48:21.456643+00 |
| description | A high-level Rust wrapper for the EasyX graphics library |
| homepage | https://araraloren.github.io/easyx-rs/ |
| repository | https://github.com/araraloren/easyx-rs/ |
| max_upload_size | |
| id | 2035304 |
| size | 177,333 |
Rust绑定的EasyX图形库,提供了简单易用的2D图形绘制API,适用于Windows平台的图形应用开发、游戏开发和可视化编程。
EasyX-RS是一个基于C++ EasyX图形库的Rust绑定,提供了高性能、跨版本兼容的2D图形绘制功能。EasyX是一个专为Windows平台设计的简单易用的图形库,广泛应用于教学、游戏开发和可视化编程领域。
在你的Rust项目中添加easyx-rs依赖:
[dependencies]
easyx-rs = "0.1.0"
use easyx::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化图形窗口,大小为800x600
run(800, 600, |app| {
// 设置文本样式
app.set_textstyle(30, 0, "微软雅黑");
// 设置文本颜色为红色
app.set_textcolor(&Color::RED);
// 输出文本
app.out_text(100, 100, "Hello, EasyX-RS!");
// 绘制直线
app.set_linecolor(&Color::BLUE);
app.line(100, 200, 700, 200);
// 绘制矩形
app.set_linecolor(&Color::GREEN);
app.rectangle(100, 300, 300, 400);
// 绘制填充圆形
app.set_fillcolor(&Color::YELLOW);
app.fill_circle(500, 350, 50);
// 等待用户按键
loop {
if let Some(msg) = app.peek_message(MessageFilter::KeyBoard, true) {
if let Message::KeyBoard { vkcode, .. } = msg.msg {
if vkcode == KeyCode::Escape {
break;
}
}
}
}
Ok(())
})
}
put_pixel)line)rectangle, fill_rectangle)circle, fill_circle)ellipse, fill_ellipse)roundrect, fill_roundrect)arc, pie)polygon, fill_polygon)poly_bezier)flood_fill)Color::new(r, g, b))Color::RED, Color::BLUE, 等)out_text)set_textstyle)text_width, text_height)begin_batch_draw, end_batch_draw)flush_batch_draw_rect)easyx-rs/
├── easyx-example/ # 示例代码
├── easyx-rs/ # 主要Rust绑定库
│ ├── src/
│ │ ├── app.rs # 应用程序管理
│ │ ├── color.rs # 颜色处理
│ │ ├── enums.rs # 枚举定义
│ │ ├── fillstyle.rs # 填充样式
│ │ ├── image.rs # 图像处理
│ │ ├── input.rs # 输入处理
│ │ ├── keycode.rs # 键盘码定义
│ │ ├── linestyle.rs # 线条样式
│ │ ├── logfont.rs # 字体设置
│ │ └── msg.rs # 消息处理
│ └── lib.rs # 库入口
└── easyx-sys/ # 原始C绑定
// 基本初始化
run(800, 600, |app| {
// 你的绘图代码
Ok(())
})
// 使用初始化标志
run_flags(800, 600, InitFlags::ShowConsole, |app| {
// 你的绘图代码
Ok(())
})
// 绘制直线
app.line(100, 100, 300, 300);
// 绘制矩形
app.rectangle(100, 100, 300, 200);
// 绘制填充矩形
app.set_fillcolor(&Color::BLUE);
app.fill_rectangle(100, 100, 300, 200);
// 绘制圆形
app.circle(200, 200, 50);
// 绘制填充圆形
app.set_fillcolor(&Color::RED);
app.fill_circle(200, 200, 50);
// 设置文本样式
app.set_textstyle(24, 0, "Arial");
// 设置文本颜色
app.set_textcolor(&Color::BLACK);
// 输出文本
app.out_text(100, 100, "Hello, EasyX-RS!");
loop {
// 非阻塞获取鼠标消息
if let Some(msg) = app.peek_message(MessageFilter::Mouse, true) {
match msg.msg {
Message::Mouse { x, y, button, .. } => {
// 处理鼠标事件
println!("Mouse: x={}, y={}, button={:?}", x, y, button);
}
_ => {}
}
}
// 非阻塞获取键盘消息
if let Some(msg) = app.peek_message(MessageFilter::KeyBoard, true) {
match msg.msg {
Message::KeyBoard { vkcode, .. } => {
// 处理键盘事件
if vkcode == KeyCode::Escape {
break;
}
}
_ => {}
}
}
}
// 开始批处理绘图
app.begin_batch_draw();
// 绘制大量图形
for i in 0..1000 {
app.put_pixel(i % 800, i % 600, &Color::new(
(i * 3) as u8,
(i * 5) as u8,
(i * 7) as u8
));
}
// 刷新批处理绘图
app.flush_batch_draw();
// 结束批处理绘图
app.end_batch_draw();
更多示例代码请查看 easyx-example 目录:
本项目采用 MIT 许可证,详情请查看 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
感谢 EasyX 团队提供的优秀图形库!
EasyX-RS - 让Rust图形编程变得简单!