c - 如何创建原始(十六进制)位图数据,是否可以在没有其他程序的情况下查看它们?
问题描述
最近我开始使用M5 Stacks Core 2,想知道它们是如何在屏幕上显示图像的。使用为 Arduino 给出的示例,我看到项目文件包含许多“.c”文件,其中包含 aconst unsigned char
后跟一系列十六进制值。以下是其中一个文件的示例:
const unsigned char image_DigNumber_0000_0[504] = {
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0x11, 0x11, 0x11, 0x11, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x21, 0x11, 0x11, 0x12, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x42, 0x11, 0x11, 0x1a, 0xf5, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x76, 0xf7, 0x11, 0x11, 0x1c, 0xff, 0x74,
0xff, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xf7, 0x11, 0x11, 0x1f, 0xff, 0xf7, 0x4c, 0xcc, 0xcc, 0xcc, 0x77, 0xff, 0xf7, 0x11, 0x11, 0x1f, 0xff, 0xfc, 0x11, 0x11, 0x11, 0x11, 0x6f, 0xff, 0xf7, 0x11,
0x11, 0x1f, 0xff, 0xfc, 0x11, 0x11, 0x11, 0x11, 0x7f, 0xff, 0xf7, 0x11, 0x11, 0x1f, 0xff, 0xfc, 0x11, 0x11, 0x11, 0x11, 0x7f, 0xff, 0xf7, 0x11, 0x11, 0x1f, 0xff, 0xfc, 0x11, 0x11, 0x11, 0x11,
0x7f, 0xff, 0xf7, 0x11, 0x11, 0x5f, 0xff, 0xfa, 0x11, 0x11, 0x11, 0x11, 0x7f, 0xff, 0xf5, 0x11, 0x11, 0x5f, 0xff, 0xf7, 0x11, 0x11, 0x11, 0x11, 0x9f, 0xff, 0xf5, 0x11, 0x11, 0x5f, 0xff, 0xf7,
0x11, 0x11, 0x11, 0x11, 0xcf, 0xff, 0xf5, 0x11, 0x11, 0x5f, 0xff, 0xf7, 0x11, 0x11, 0x11, 0x11, 0xcf, 0xff, 0xf5, 0x11, 0x11, 0x6f, 0xff, 0xf7, 0x11, 0x11, 0x11, 0x11, 0xcf, 0xff, 0xf5, 0x11,
0x11, 0x7f, 0xff, 0xf7, 0x11, 0x11, 0x11, 0x11, 0xcf, 0xff, 0xf5, 0x11, 0x11, 0x7f, 0xff, 0xf3, 0x11, 0x11, 0x11, 0x11, 0x7f, 0xff, 0xf2, 0x11, 0x11, 0x7f, 0xfd, 0x41, 0x11, 0x11, 0x11, 0x11,
0x17, 0xff, 0xf1, 0x11, 0x11, 0x2f, 0xd2, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x6f, 0xc1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x31, 0x11, 0x11, 0x56, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0xef, 0x91, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0xdf, 0x31, 0x11, 0x11, 0xff, 0xfa, 0x11, 0x11, 0x11, 0x11, 0x11, 0x4f, 0xff, 0x71, 0x11,
0x13, 0xff, 0xff, 0x91, 0x11, 0x11, 0x11, 0x13, 0xff, 0xff, 0x71, 0x11, 0x15, 0xff, 0xff, 0xc1, 0x11, 0x11, 0x11, 0x17, 0xff, 0xff, 0x71, 0x11, 0x15, 0xff, 0xff, 0xc1, 0x11, 0x11, 0x11, 0x17,
0xff, 0xff, 0x71, 0x11, 0x15, 0xff, 0xff, 0xc1, 0x11, 0x11, 0x11, 0x17, 0xff, 0xff, 0x51, 0x11, 0x15, 0xff, 0xff, 0xc1, 0x11, 0x11, 0x11, 0x17, 0xff, 0xff, 0x51, 0x11, 0x15, 0xff, 0xff, 0xb1,
0x11, 0x11, 0x11, 0x17, 0xff, 0xff, 0x51, 0x11, 0x17, 0xff, 0xff, 0x71, 0x11, 0x11, 0x11, 0x1c, 0xff, 0xff, 0x51, 0x11, 0x17, 0xff, 0xff, 0x71, 0x11, 0x11, 0x11, 0x1c, 0xff, 0xff, 0x41, 0x11,
0x17, 0xff, 0xff, 0x71, 0x11, 0x11, 0x11, 0x1c, 0xff, 0xff, 0x11, 0x11, 0x17, 0xff, 0xff, 0x71, 0x11, 0x11, 0x11, 0x1c, 0xff, 0xff, 0x11, 0x11, 0x17, 0xff, 0xff, 0x61, 0x11, 0x11, 0x11, 0x1d,
0xff, 0xff, 0x11, 0x11, 0x17, 0xff, 0xf7, 0x7c, 0xcc, 0xcc, 0xcc, 0x47, 0xff, 0xff, 0x11, 0x11, 0x17, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x6f, 0xfc, 0x11, 0x11, 0x17, 0xfa, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0x44, 0xf7, 0x11, 0x11, 0x14, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x31, 0x11, 0x11, 0x11, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x11, 0x11, 0x11,
0x11, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
};
在主代码中调用它是这样的:
DisClockbuff.drawColorBitmap(posx[1],26,24,42,
DigNumber[ sytState.Rtctime.Hours % 10 ],
0xff9c00,
0x1a1100);
我的问题是他们是如何创建这个位图图像并收集它的十六进制值的。此外,我如何能够使用十六进制值查看这些单独的位图图像。甚至可能吗?
解决方案
他们是如何创建此位图图像并收集其十六进制值的?
如何创建图像取决于显示器的硬件,更具体地说,取决于显示模块使用的显示驱动芯片。您必须了解显示驱动程序(即阅读显示驱动程序的数据表)并创建库,使用芯片的字体。
我不知道 M5 Stacks 使用的是什么显示器,但我有一篇博客讨论如何创建一个显示库以使用 LCD 显示器,即通常称为诺基亚 5110 显示器,它使用名为 PCD 8544 的显示芯片,博客应该给出您对如何为该特定显示芯片创建位图图像有所了解。
如何使用十六进制值查看这些单独的位图图像?
答案是也许。如果您知道列和行,并相应地对齐数据,您可能能够大致看到要显示的图像。例如,这是 Adafruit 的 SSD1306 lcd(128x64 像素的 oled 显示器)的 logo 的位图图像,当这样对齐数据时,你可以从这个数据结构直接模糊地看到杨桃 logo,因为数据在这种情况下,位(0 或 1)与要在屏幕上显示的像素直接相关。然而,这可能是不可能的,这取决于数据的结构方式(例如,某些显示器将显示划分为页面,并且在每个页面内,每个数据字节代表显示器上的垂直列)。
static const unsigned char PROGMEM logo_bmp[] =
{ 0b00000000, 0b11000000,
0b00000001, 0b11000000,
0b00000001, 0b11000000,
0b00000011, 0b11100000,
0b11110011, 0b11100000,
0b11111110, 0b11111000,
0b01111110, 0b11111111,
0b00110011, 0b10011111,
0b00011111, 0b11111100,
0b00001101, 0b01110000,
0b00011011, 0b10100000,
0b00111111, 0b11100000,
0b00111111, 0b11110000,
0b01111100, 0b11110000,
0b01110000, 0b01110000,
0b00000000, 0b00110000 };
推荐阅读
- sql-server - How to Find Previous and Next Value for Days in MSSQL?
- java - Regex for matching mobile topup codes and Url
- java - java.lang.IllegalStateException:在父级或祖先中找不到方法 onClickForgot(View)
- list - 如何忽略列表到列表映射中的成员?
- python - 在 python 中复制文件时出错(在路径中添加 r 前缀)
- python - 当我将目录更改为 /var/www/html 时,Python 代码没有运行
- c - I'm finding the frequency of each letter, although it always returns 0 for all the letters
- python - 我已经通过 python 安装了一个新库,但我在 pythoncharm 中找不到
- ruby - scrapoxy 中的响应标头中缺少“x-cache-proxyname”
- android - 如何在静态方法android中重用相同的对象