分享自己研究方法如下:
画位图原理自定义画中文字符:
取模方法如下,在C表格-紧凑格式后索引的基础上简单修改,把中文字与字模用大括号分开,得到如下数据格式。调用打印函数时,会先搜索中文字符的UTF8码做索引;
拷到.C文件中生成数组:
//打印单个字符的调用方法:u8g2_DrawXBMP(&u8g2, x, y, 12, 12, lc1212c[0]);
static u8 code lc1212c[][] = {
{0x00,0x00,0x08,0x01,0x88,0x00,0x48,0x00,0x28,0x00,0xfe,0x07,0x48,0x00,0x48,0x00,
0x88,0x00,0x28,0x01,0x38,0x06,0x08,0x00},{"长"}, /* 0 */
{0x80,0x00,0x84,0x00,0xe4,0x07,0x2e,0x04,0xa4,0x04,0x84,0x00,0xec,0x07,0x47,0x02,
0x24,0x01,0xc4,0x01,0x84,0x03,0x76,0x04},{"按"}, /* 1 */
{0x00,0x00,0xe4,0x01,0x2c,0x01,0x20,0x01,0x36,0x07,0x14,0x00,0xf4,0x03,0x24,0x02,
0x44,0x01,0xcc,0x00,0xcc,0x01,0x3c,0x06},{"设"}, /* 2 */
{0x00,0x00,0xfc,0x03,0x94,0x02,0x68,0x01,0xfe,0x07,0x20,0x00,0xdc,0x01,0xf8,0x01,
0xf8,0x01,0x04,0x01,0xfc,0x01,0xfe,0x07},{"置"}, /* 3 */
{0x00,0x00,0xe8,0x03,0x24,0x02,0x24,0x02,0xe6,0x03,0x86,0x00,0xf4,0x07,0xc4,0x01,
0xa4,0x01,0xa4,0x02,0x94,0x04,0x8c,0x00},{"保"}, /* 4 */
{0x20,0x00,0x20,0x00,0xfe,0x07,0x10,0x00,0x08,0x00,0xe8,0x07,0x0c,0x01,0x8a,0x00,
0xf8,0x07,0x88,0x00,0x88,0x00,0xc8,0x00},{"存"}, /* 5 */
{0x00,0x00,0xfc,0x07,0x44,0x00,0x44,0x00,0x44,0x00,0xf4,0x07,0x44,0x02,0x44,0x02,
0x24,0x02,0x22,0x02,0x32,0x02,0x1a,0x03},{"历"}, /* 6 */
{0x40,0x00,0x40,0x00,0xfc,0x03,0x44,0x02,0x44,0x02,0x44,0x02,0xfc,0x03,0x2c,0x00,
0x28,0x00,0x30,0x00,0xf8,0x00,0x06,0x07},{"史"}, /* 7 */
{0x00,0x00,0xe4,0x03,0x08,0x02,0x00,0x02,0x06,0x02,0xe4,0x03,0x24,0x02,0x24,0x00,
0x24,0x00,0x34,0x04,0x2c,0x04,0xc4,0x07},{"记"}, /* 8 */
{0x00,0x00,0xfc,0x03,0x00,0x02,0xfc,0x03,0x00,0x01,0xfe,0x07,0x42,0x01,0x4c,0x03,
0xc8,0x00,0xd8,0x01,0x46,0x06,0x30,0x04},{"录"}, /* 9 */
};
//定义打印字符串的函数:
//打印自定义的中文字符串到坐标X,Y处,
//参数定义: cWith,cHeight 字符取模时的宽 和 高度为,
// str 中文字符串 strLen中文字符串长度
// bmpA: 取模得到的二维数组,bmpALen:此二维数组第一维的大小,bmpACharSize:第二维的大小
void lcDrawUtf8Str(u8 x,u8 y,u8 cWith,u8 cHeight,u8* str,u8 strLen,u8* bmpA,u8 bmpALen,u8 bmpACharSize)
{
u8 i =0,j=0;
//LOGINF(1,"in %d %d\r\n",bmpALen,bmpACharSize);
for(;i<strLen;)
{
for(j=0;j<=bmpALen/2;)
{
// LOGINF(1,"bmpa %02x\r\n",(i*2-1)*bmpACharSize);
if(memcmp(&str[3*i],&bmpA[(j*2+1)*bmpACharSize],3) == 0){ //比对UTF8码是否相同
//LOGINF(1,"cmp ok %d %d\r\n",i,j);
u8g2_DrawXBMP(&u8g2, x+cWith*i, y, cWith, cHeight, &bmpA[j*2*bmpACharSize]);
}
j++;
}
i++;
}
}
//调用打印输出
lcDrawUtf8Str(20,30,12,12,"长按记录",4,lc1212c,sizeof(lc1212c)/sizeof(lc1212c[0]),sizeof(lc1212c[0])); |