首页 > 解决方案 > 如何创建原始(十六进制)位图数据,是否可以在没有其他程序的情况下查看它们?

问题描述

最近我开始使用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);

我的问题是他们是如何创建这个位图图像并收集它的十六进制值的。此外,我如何能够使用十六进制值查看这些单独的位图图像。甚至可能吗?

标签: carduino

解决方案


他们是如何创建此位图图像并收集其十六进制值的?

如何创建图像取决于显示器的硬件,更具体地说,取决于显示模块使用的显示驱动芯片。您必须了解显示驱动程序(即阅读显示驱动程序的数据表)并创建库,使用芯片的字体。

我不知道 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 };

推荐阅读