| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 923 人关注过本帖
标题:[求助]关于mempoint(x,y,color)中几点不懂得地方,请指教!
取消只看楼主 加入收藏
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
 问题点数:0 回复次数:7 
[求助]关于mempoint(x,y,color)中几点不懂得地方,请指教!

基本算法我可以看懂:通过传入的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编辑过]

搜索更多相关主题的帖子: mempoint color 指教 
2006-09-03 14:46
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
哦,谢谢你啊,共用体是里边变量共用相同的内存,这个很好!
2006-09-03 15:30
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
哦,
2006-09-03 15:31
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
数组分配的时候,不是从低地址到高地址吗?
是不是在共用体中有所不同?
c[0]是高8位?
2006-09-03 15:38
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
如果是这样,那么第二次
bit_mask.i=2*bit_position,
就没有改变c[0]的值,这样*(ptr+index)&bit_mask.c[0],好像没有什么意义拉
2006-09-03 15:42
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
以下是引用realove在2006-9-3 15:42:44的发言:
如果是这样,那么第二次
bit_mask.i=2*bit_position,
就没有改变c[0]的值,这样*(ptr+index)&bit_mask.c[0],好像没有什么意义拉

哦,看错了,原来有是bit_mask.i>>=2*bit_position,这样正好,可以把原来的位置零,
对你是对了,太谢谢啦!

2006-09-03 15:56
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
以下是引用soft_wind在2006-9-3 15:58:57的发言:

是低8位.不过这个我也讲不清.
我用这个程序验证的,也许数组的空间分配规则不一样也不一定。
#include<stdio.h>
#include <conio.h>
union mask{
char c[2];
int i;
}bit_mask;
void main()
{

bit_mask.i=256;
printf("%d%d",bit_mask.c[0],bit_mask.c[1]);
getch();
}
如果c[0]是高8位,显示的应该是10,而实际上显示的01.
期待高手回复....

[此贴子已经被作者于2006-9-3 16:05:36编辑过]

2006-09-03 16:04
realove
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-8
收藏
得分:0 
加我的qq吧,这样进步可能更快些,学习的也不会太孤单!
46332383
2006-09-03 16:11
快速回复:[求助]关于mempoint(x,y,color)中几点不懂得地方,请指教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026183 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved