c - 用 C 将位图样式字体绘制到显示缓冲区的算法

标签 c algorithm graphics embedded-fonts

对于具有黑色/白色像素(非灰度)的小型单色 LCD 的 8 位嵌入式系统,我需要一种有效的方式来存储和显示字体。我可能会选择两种固定宽度的字体,4x5 像素和 5x7 像素。资源非常有限:30k ROM,2k RAM。字体将以 1:1 的比例写入缓冲区,作为具有以像素为单位的给定起始偏移量的单行字符串 (char* str, byte x, byte y)

我想我会使用 1k RAM 作为缓冲区。除非有更有效的写入字体的结构,否则我会安排它以便可以按顺序写入 LCD,如下所示:

byte buffer[1024];

其中每个字节代表 8 个像素的水平线(左边的 MSB),显示的每一行都是从左到右完成的,以这种方式,从上到下。 (所以每一行由(128px/8 =)16个字节表示。)

所以我的问题是:

  1. 应如何存储字体?
  2. 缓冲区应该采用什么形式?
  3. 应如何将字体写入缓冲区?

我假设有一些标准算法可以解决这个问题,但我在搜索中找不到任何东西。任何建议都会非常有帮助(我不希望有人为我编写代码!!)

谢谢

最佳答案

首先,执行 bit blit ,一种具有多种用途的基元,包括绘制字符。这决定了您问题的以下答案。

  1. 作为位图。
  2. 一张位图。
  3. 位 block 传输。

位 blit 的实现本身涉及一堆按位操作,从源位图中重复提取一个字节或两个部分字节的组合,以与目标字节组合。

关于c - 用 C 将位图样式字体绘制到显示缓冲区的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16476778/

相关文章:

c++ - 在 switch-case 中打开 else 分支可以吗?

c - Popen 和 execl 未给出用户定义程序的输出

c - C中字符串压缩的ascii输出

c - 计算某个IP范围和时间范围内的访问次数的有效方法

java - 如何在其他正方形的中心内绘制和旋转正方形?

c - mysql_init覆盖内存空间

javascript - 使用两个循环进行更改的时间复杂度 - javascript

java - 如何检查一个数 < 1 是否是 2 的幂?

c++ - 在 Vulkan 中加载非二次幂纹理

java - 如何创建 Ellipse2D 数组?