前面的函数已经介绍怎么样显示一个字符串了,那么下面就来仔细地实查看怎么样实现一个字符的显示,当然这里字符的显示,只是字母的显示,没有中文显示,如果需要实现中文字符的显示,就需要修改这个函数和相应的排版函数、读取相应的字体文件。由于显示卡已经被初始化为图形模式,那么所有字符的显示都生成图形方式来显示,文字也不例外,因此需要使用字体的点阵数据。具体实现代码如下:
#001 VOID
#002 NTAPI
#003 displayCharacter(CHAR Character,
#004 ULONG Left,
#005 ULONG Top,
#006 ULONG TextColor,
#007 ULONG BackTextColor)
#008 {
#009 PUCHAR FontChar;
#010 ULONG i,j,XOffset;
#011
从字体数组里获取字符的图形点阵数据。
#012 /* Get the font line for this character */
#013 FontChar = &FontData[Character * 13 - Top];
#014
每字符高度为13像素.
#015 /* Loop each pixel height */
#016 i = 13;
#017 do
#018 {
每字符的16个像素显示。
#019 /* Loop each pixel width */
#020 j = 128;
#021 XOffset = Left;
#022 do
#023 {
检查是否需要显示这个点像素,从字体的高位开始从来第一个像素显示。
#024 /* Check if we should draw this pixel */
#025 if (FontChar[Top] & (UCHAR)j)
#026 {
#027 /* We do,use the given Text Color */
#028 SetPixel(XOffset,Top,(UCHAR)TextColor);
#029 }
#030 else if (BackTextColor < 16)
#031 {
这里显示背境颜色。
#032 /* This is a background pixel. We're drawing it unless it's */
#033 /* transparent. */
#034 SetPixel(XOffset,(UCHAR)BackTextColor);
#035 }
#036
每次只移动一个像素。
#037 /* Increase X Offset */
#038 XOffset++;
#039 } while (j >>= 1);
#040
#041 /* Move to the next Y ordinate */
#042 Top++;
#043 } while (--i);
#044}
原文地址:https://www.jb51.cc/react/308378.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。