Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何将字母表转换为像素_String_Matrix_Character_Pixelate - Fatal编程技术网

String 如何将字母表转换为像素

String 如何将字母表转换为像素,string,matrix,character,pixelate,String,Matrix,Character,Pixelate,你知道有一个程序或脚本可以将字母转换成表示字母的矩阵(由0和1组成)? 例如,从字母I到矩阵,如下所示:(这是一个显示字母I的LED面板): 请告诉我一种创建此类矩阵的方法,而不是手动键入 Thx 您可以尝试找到一种外观符合您需要的字体(可能是Courier之类的单间距字体),以一定的大小(8pt?)绘制/光栅化它,而无需消除混叠,然后将生成的图像转换为矩阵格式。唯一的解决方案是使用字体 对于硬件实现,我通常使用EGA/VGA 8x8字体 从gfx卡中提取BIOS您可以在MS-DOS环境中轻松

你知道有一个程序或脚本可以将字母转换成表示字母的矩阵(由0和1组成)? 例如,从字母I到矩阵,如下所示:(这是一个显示字母I的LED面板):

请告诉我一种创建此类矩阵的方法,而不是手动键入

Thx

您可以尝试找到一种外观符合您需要的字体(可能是Courier之类的单间距字体),以一定的大小(8pt?)绘制/光栅化它,而无需消除混叠,然后将生成的图像转换为矩阵格式。

唯一的解决方案是使用字体

  • 对于硬件实现,我通常使用EGA/VGA 8x8字体

    从gfx卡中提取BIOS您可以在MS-DOS环境中轻松操作

  • 另一种方法是通过编程从图像中提取字体

    将整个字体绘制为位图(在直线或矩阵中…,或者使用一些已经创建的字体,如我的)。使用最适合您需要的固定音高、字体大小,不要忘记几乎没有一种现代字体支持固定音高,因此请使用
    OEM_CHARSET
    System
    命名字体。正确设置颜色(理想的是黑色背景和白色字体),逐像素读取图像并将其存储为数字表。非背景色的像素设置为像素

    由于抗锯齿和过滤器的原因,请勿与字体颜色进行比较。现在读取所有字符并在字体表中设置/res对应位。首先计算图像中字符的起始
    x,y
    (从ASCII编码和图像组织),然后对循环执行两个嵌套的8步
    x,y
    (按照
    font[]
    组织的顺序)

    set/res
    在地址
    8*ASCII
    8*ASCII+8

  • 我假设您使用MCU控制LED面板

    内存中的字体组织通常是8位数字表示字符中的单行。当然,如果您的LED面板要显示动画滚动条,那么字体的列组织以及硬件实现将大大简化。如果您有16位MCUIO访问权限,则可以使用
    16位
    /pixels字体大小

    如果您有超过8个像素且只有8位MCU,您仍然可以使用16位数据,但IO访问将分两步通过两个IO端口进行,而不是1个我强烈建议使用全数据范围的IO访问,而不是设置/恢复单个IO线其速度更快,并且可以防止闪烁

  • 好的,这是我以前使用的
    8x8
    字体。。。我想这是从EGA/VGA BIOS中提取的,但我不是shore。。。那是很久以前的事了

    现在是有趣的部分

    const BYTE font[8*256]={ 0,0,0,0,0,0,0,0, ... }
    
    任何字符都表示为8个数字。如果位为
    0
    ,则表示纸张(背景像素);如果位为
    1
    ,则表示墨水(字体像素)。现在有更多的组合(从左到右、从上到下以及它们的组合)

    OK(行虎钳|从左到右|从上到下)组织表示:

    • 第一个数字是字符的最上面一行
    • msb是最左边的像素
    • lsb是最右边的像素
    因此,例如
    8x8
    中的字符“1”将是这样的(b表示二进制数):

    将所有字符提取到字体表后,将其作为源代码保存到文件中,稍后将包含在MCU代码中(可放置在EEPROM中以获取pgm代码)

    现在,在LED面板上打印字符的算法在很大程度上取决于您的硬件实现

    • 因此,请张贴LED面板和控制系统之间互连的电路图
    • 指定目标平台和语言
    • 指定所需的功能
    我想你想要按像素步向左滚动

  • 如果您的LED面板由列而不是行驱动,则最适合

    您可以通过一些数据IO端口激活LED的单个列(所有位一次都可以激活),并通过另一个选择IO端口(一次只能激活单个位)驱动选择哪一列是激活的。因此,在本例中,计算要在字体表中显示的列的起始地址:

    • 地址=(8*ASCII+x_偏移量)
    • font[8*ASCII+x_偏移量]
      发送到数据IO端口
    • 激活在正确位处于活动状态的情况下选择IO端口
    • 请稍等(1-10毫秒)。。。因此,如果延迟太短,则实际上可以看到灯光,如果延迟太长,则没有亮度,然后出现闪烁,因此需要进行一点实验(取决于所选位的数量)
    • 停用选择IO端口
    • 对下一列重复此操作
    • x_offset
      是滚动移位
  • 如果您的硬件实现不适合这种方式,请不要担心

    只需使用位移位、AND、OR操作在内存中创建数据字,然后以类似的方式发送它们


  • 希望它能帮你一点忙

    哦,如果你的内存不足,你可以只使用字母表和数字。。。忘记特殊字符,这样您的字体数据会更少,但字符串编码必须与字体匹配。。。或者跳过前32个字符和最后128个字符,这会使一半以上的memory@user1776194我可以看出你还没有找到答案。。。如果对你的问题有任何答案是有帮助的,你可以投票(我不确定你是否可以立即投票或者是否需要一些代表)通过投票数上方的小三角进行投票,如果是错误的,滥用。。。然后你可以用同一个数字下面的三角形投票否决它
    00000000b,
    00001000b,
    00011000b,
    00101000b,
    00001000b,
    00001000b,
    00111100b,
    00000000b,