调试电子书项目出现的错误现象和解决

现象一:可以显示,屏幕的一部分显示其他内容。

在 fb.c 文件中的 FBShowPixel 函数和 FBCleanScreen 函数中这一部分代码出错(参考视频中说的用for循环写的是错误的。)

下面代码是改正过的,

case 16:
		{
			#if 0
			/* 565 */
			red     = (dwBackColor >> 16)&0xff;/* 0xRR     &  0xff = 0xRR */
			green   = (dwBackColor >> 8 )&0xff;/* 0xRRGG   &  0xff = 0xGG */
			blue    = (dwBackColor >> 0 )&0xff;/* 0xRRGGBB &  0xff = 0xBB */
			dwBackColor = ((red>>3)<<11)|((green>>2)<<5)|(blue>>3);
			// 	1111 1111 >> 3 = 0001 1111 << 11 = 1111 1000 0000 0000
			#endif

			red   = (dwBackColor >> (16+3)) & 0x1f;
			green = (dwBackColor >> (8+2)) & 0x3f;
			blue  = (dwBackColor >> 3) & 0x1f;
			wColor16bpp = (red << 11) | (green << 5) | blue;
	
			while (i < g_iScreenSize)
			{
				*pwPen16 = wColor16bpp;
				pwPen16 ++; 
				i+=2;
			}
			break;
		}

		case 32:
		{
			while (i < g_iScreenSize)
			{
				*pdwPen32 = dwBackColor;
				pdwPen32 ++; 
				i+=4;
			}
			break;
		}

现象二:修改显示字体失败

支持GBK码的字体和支持ascii码的字体是不支持显示字体不是16的文件。也就是说不可以修改显示字体的大小,而使用freetype字体(支持Unicode码)则是可以的。换句话说,不支持ansi编码的文本文件设置字体大小(因为这个程序里支持ansi编码的文本文件最终会转化为gbk码)。支持最终能转化为unicode编码的文本文件设置字体大小。

在asccii.c文件中提到

static int ASCIIFontInit(char *pcFontFile, unsigned int dwFontSize)
{
	if (dwFontSize != 16)
	{
		//DBG_PRINTF("ASCII can't support %d font size\n", dwFontSize);
		return -1;
	}
	return 0;
}

在gbk.c文件中提到

static int GBKFontInit(char *pcFontFile, unsigned int dwFontSize)
{
	struct stat tStat;

	if (16 != dwFontSize)
	{
		DBG_PRINTF("GBK can't support %d fontsize\n", dwFontSize);
		return -1;
	}
	...
	return 0;
}

我在测试我写的程序时,试图修改使用freetype字体的文本文件显示字体的大小,发现无法修改。

经过仔细查找,最终发现,使用printf输出语句可以定位到错误位置。(程序中,只是在main.c中使用到了printf语句,其他位置都相当于注释了)

经过printf定位我发现,在程序中,我少写了判断返回值的语句。

/* 准备显示的字符的大小为 24 * 24 */
  	error = FT_Set_Pixel_Sizes(g_tFace,dwFontSize,0);
	if(error)//这句话没写
	{
		/* error handling omitted */
      	printf("FT_Set_Pixel_Sizes error!\n");
		return -1;
	}

现象三:在参考的程序上分别去测试是否支持ANSI、UTF-8、带有BOM的UTF-8、UTF-16BE和UTF16LE编码的文件,发现不支持UTF-8编码的文件,而我仿写的既不支持UTF-8编码的文件,也不支持带有BOM的UTF-8编码的文件。

从最后验证的可执行程序的结果来看,该代码支持
在这里插入图片描述
而不支持
在这里插入图片描述
从实际测试结果看,上面两幅图没有弄反,我在考虑是不是可以修改下,让它都支持。

通过反复对比,终于发现问题。
产生该问题的原因有两处。
第一处:utf-8.c文件中的
数组写的不对。
在这里插入图片描述
第二处:ansi.c文件中的
相应的数组写的也不对。
在这里插入图片描述
改正之后,运行与参考代码测试结果一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuechanba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值