#pixel-art #art #interactive #image #graphics

pixel-canvas

一个库,通过像素缓冲区轻松构建交互式计算机艺术

5个版本

0.2.3 2022年6月19日
0.2.2 2020年12月11日
0.2.1 2020年3月1日
0.2.0 2019年9月16日
0.1.0 2019年8月25日

#91渲染

Download history 77/week @ 2024-03-12 94/week @ 2024-03-19 44/week @ 2024-03-26 124/week @ 2024-04-02 57/week @ 2024-04-09 69/week @ 2024-04-16 66/week @ 2024-04-23 57/week @ 2024-04-30 65/week @ 2024-05-07 58/week @ 2024-05-14 78/week @ 2024-05-21 68/week @ 2024-05-28 50/week @ 2024-06-04 57/week @ 2024-06-11 81/week @ 2024-06-18 69/week @ 2024-06-25

每月266次下载
用于 fpgrars

MIT/Apache

32KB
568

Crates.io Docs.rs Build Status

像素画布

该库旨在通过像素缓冲区轻松构建交互式计算机艺术。为了获得灵感,可以考虑查看 https://shadertoy.comhttp://www.iquilezles.org/www/index.htm,那里有很多有趣的艺术作品和技巧的解释!

使用方法

要制作一件艺术品,您需要创建和配置一个 Canvas 对象,然后请求它使用您的代码进行 render。画布将进行状态管理,并给您一个可以修改的图像。您对图像所做的任何修改都将显示在屏幕上。

示例

use pixel_canvas::{Canvas, Color, input::MouseState};

fn main() {
    // Configure the window that you want to draw in. You can add an event
    // handler to build interactive art. Input handlers for common use are
    // provided.
    let canvas = Canvas::new(512, 512)
        .title("Tile")
        .state(MouseState::new())
        .input(MouseState::handle_input);
    // The canvas will render for you at up to 60fps.
    canvas.render(|mouse, image| {
        // Modify the `image` based on your state.
        let width = image.width() as usize;
        for (y, row) in image.chunks_mut(width).enumerate() {
            for (x, pixel) in row.iter_mut().enumerate() {
                let dx = x as i32 - mouse.x;
                let dy = y as i32 - mouse.y;
                let dist = dx * dx + dy * dy;
                *pixel = Color {
                    r: if dist < 128 * 128 { dy as u8 } else { 0 },
                    g: if dist < 128 * 128 { dx as u8 } else { 0 },
                    b: (x * y) as u8,
                }
            }
        }
    });
}

或运行一个包含的示例(使用nightly)

cargo +nightly run --example api_example

许可证:MIT OR Apache-2.0

依赖关系

~7–11MB
~214K SLoC