c语言关于字模输出函数的问题

mynewnum 2018-09-18 08:02:47
大神帮忙看下输出字模的函数,实在看不懂,谢谢!下面是输出字模的函数:
/*输出字模的函数*/

void _draw_model(char *pdata, int w, int h, int x, int y, int color)

{

int i; /* 控制行 */

int j; /* 控制一行中的8个点 */

int k; /* 一行中的第几个"8个点"了 */

int nc; /* 到点阵数据的第几个字节了 */

int cols; /* 控制列 */

BYTE static mask[8]={128, 64, 32, 16, 8, 4, 2, 1}; /* 位屏蔽字 */

w = (w + 7) / 8 * 8; /* 重新计算w */

nc = 0;

for (i=0; i<h; i++)

{

cols = 0;

for (k=0; k<w/8; k++)

{

for (j=0; j<8; j++)

{

if (pdata[nc]&mask[j])

putpixel(x+cols, y+i, color);

cols++;

}

nc++;

}

}

}
为什么要重新计算w?实在搞不明白,谢谢,请大神帮忙分析下代码。
...全文
284 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2018-09-20
  • 打赏
  • 举报
回复
从上下文看 w单位是“位”,表示字模的宽度
char *pdata 存放的是字模具体数据,单位是字节,每字节等于8位
所以要w=(w+7)/8*8 算出,每行需要多少字节
幻夢之葉 2018-09-18
  • 打赏
  • 举报
回复
保证w/8是整除的,防止小数部分被舍弃,因为int/int得出的是向下取整(对于>=0的情况)
沐雨青城 2018-09-18
  • 打赏
  • 举报
回复
重新计算w,看起来像是为了保证w始终为8的倍数。看起来代码像是每行同时控制8个点的,保证w为8的倍数应该是为了避免出现重复或者遗漏。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧