#lcd #monochrome #screen #display #simulation #graphics #dot-matrix

simulate-lcd

一个简单的库,用于模拟单色点阵显示屏,例如单色LCD屏幕。

3个版本

0.1.2 2023年3月31日
0.1.1 2023年3月31日
0.1.0 2023年3月31日

可视化 中排名第249

每月下载33

Apache-2.0

23KB
169

simulate-lcd

一个简单的库,用于模拟单色点阵显示屏,例如单色LCD屏幕。

文档

示例

use std::{thread::sleep, time::Duration};

use rand::{thread_rng, Rng};
use sdl2::event::Event;
use simulate_lcd::{Bitmap, LcdScreen}
use simulate_lcd::{LCD_DARK_GREEN, LCD_LIGHT_GREEN};

const NANOS_PER_SEC: u64 = 1_000_000_000;

fn main() {
    let sdl_context = sdl2::init().unwrap();
    let mut screen = LcdScreen::<64, 96>::new(
        &sdl_context,
        "LCD Demo: Random",
        LCD_DARK_GREEN,
        LCD_LIGHT_GREEN,
        10,
        10,
    )
    .unwrap();

    let mut event_pump = sdl_context.event_pump().unwrap();
    'running: loop {
        for event in event_pump.poll_iter() {
            match event {
                Event::Quit { .. } => break 'running,
                _ => {}
            }
        }

        let mut rng = thread_rng();
        let random_bits: Vec<[bool; 96]> = (0..64)
            .map(|_| rng.gen())
            .collect();
        screen.draw_bitmap(&random_bits.try_into().unwrap())
            .unwrap();

        sleep(Duration::new(0, NANOS_PER_SEC / 60));
    }
}

更多示例可以在示例文件夹中找到。

使用方法

LcdScreen 是此crate提供的主要类型。要创建具有 R 行和 C 列点的新的模拟屏幕窗口,请使用函数 LcdScreen::<R, C>::new,以下参数

  • sdl_context: 一个 Sdl 上下文对象
  • title: 窗口标题
  • on_color: 点在开启时的颜色。例如,在背光LCD屏幕上接近黑色
  • off_color: 点在关闭时的颜色。例如,在绿色背光LCD屏幕上的绿色
  • dot_width: 实际窗口中点的宽度(像素)
  • dot_height: 实际窗口中点的高度(像素)

LcdScreen 对象被丢弃时,包括在其创建的作用域结束时,屏幕将消失。使用循环或其他设备来阻止屏幕对象被丢弃。

可以使用 draw_bitmap 方法在屏幕上绘制新图像。draw_bitmap 方法接受任何可以转换为 [[bool;C];R] 数组的对象。该行主序数组中的每个 true 表示一个“开启”的点。simulate-lcd 提供了 Bitmap<C, R> 作为 [[bool;C];R] 的便捷别名。

屏幕上的“开启”和“关闭”颜色是 sdl2::pixels::Color 对象。它们可以通过 sdl2::pixels::Color 函数从 RGB 值创建。simulate-lcd 提供了 LCD_DARK_GREENLCD_LIGHT_GREEN 常量,用于模拟绿色背光 LCD 屏幕。

设置

simulate-lcd 基于库 sdl2 构建。创建一个新的 LcdScreen 需要一个由 Sdl 函数创建的 sdl2::init() 函数创建的 Sdl 上下文对象。请注意,sdl2 可能需要比仅仅添加 crate 更多的设置。有关详细信息,请参阅 sdl2 README

许可证

根据 Apache 许可证 2.0 版本(https://apache.ac.cn/licenses/LICENSE-2.0)授权。

依赖项

~16MB
~345K SLoC