基本算法我可以看懂:通过传入的x,y,color,寻找像素点在内存中的位置。
我的疑问:
1。320*200的分辨率,在if(x<0||x>199||y<0||y>319),是不是x&y搞反了???
2。bitmask.c[0]是什么东西,为什么没有初始化?
3。if(!xor),干吗不直接用t=*(ptr+index)||11<<2*(3-positon);//position2位被置为11,*(ptr+index)=t&color_code?,
如果按他这种描述方法,应该先将position两位设为00,然后或上颜色码。
那么为什么看不到bitmask.c[0]的初始化值啊???比如颜色码是10,y%4=2,bitmask.c[0]应该是32,他为什么没有赋值。
源程序
/*mempoint(int x,int y,int color_code)*/
void mempoint(int x,int y,int color_code)
{
union mask{
char c[2];
int i;
}bit_mask;
int i,index,bit_position;
unsigned char t;
char xor;
char far *ptr=(char far*)0xB8000000;
bit_mask.i=0xFF3F;
if(y<0||y>319||x<0||x>199)return;
xor=color_code&128;
color_code=color_code&127;
bit_position=y%4;
color_code<<=2*(3-bit_position);
bit_mask.i=2*bit_position;
index=x*40+y/4;
if(x%2)index+=8192;
if(!xor){
t=*(ptr+index)&bit_mask.c[0];
t=*(ptr+index)|color_code;
}else{
t=*(ptr+index)|(char)0;
*(ptr+index)=t|color_code;
}
}
/*over*/
[此贴子已经被作者于2006-9-3 15:17:45编辑过]