/*依次:字模指針、點陣大小、起始坐標(x,y)、顏色*/
{int i,j,k,n;
n=(matsize-1)/8+1;//n是點陣的列數
for(j=0;j<matsize;j++)//j代表點陣中第j行的字符意思
for(i=0;i<n;i++)//i代表點陣中第i列字符的意思
for(k=0;k<8;k++)//k代表在當前字模中,第k位的值
if(mat[j*n+i]&(0x80>>k)) /*測試為1的位則顯示*/
putpixel(x+i*8+k,y+j,color);
}
妳把字模的每個矩陣元素用二進制展開就知道k的意思了:
char shan16[]={
/* 以下是 '山' 的 16點陣宋體 字模,32 byte */
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x08,0x21,0x08,
0x21,0x08,0x21,0x08,0x21,0xF8,0x2E,0x08,
0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
};
相當於:
0000 0000 0000 0000 0000 0001 0000 0000
0000 0001 0000 0000 0000 0001 0000 0000
0000 0001 0000 0000 0000 0001 0000 0000
0000 0001 0000 1000 0010 0001 0000 1000
0010 0001 0000 1000 0010 0001 0000 1000
0010 0001 1111 1000 0010 1110 0000 1000
0011 0000 0000 1000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
最後得到:
_______________8________________
___________8___8________________
___________8___8________________
______8____8___8________8___8___
__8___8____8___8________8___8___
__8___8____8888_8888____8___8___
__88____________________8_______
________________________________