bmp图像 getPixel的问题

疯魔症 2008-04-13 10:09:23
已经建立了一个CDIB类,构造函数和显示图像都没问题,但是操作像素时,抱错,内存不能为读
没有头绪,在这求助大家帮忙,谢谢
下面是DibAddress和getPixel的代码
BYTE * CDIB::DibAddress(int x,int y) //取像素数据存储地址
{
BYTE * lp;
int le;
int yy;

if(bitCount<8) //检查像素为数,只处理8位以上
{AfxMessageBox("本程序只处理 8 位以上的图像"); return 0;}
if((x<0) || (y<0) || (x>=(int)wid) || (y>=(int)hei)) //检查参数是否超出范围
{AfxMessageBox("参数超出范围");return 0;}

le=(int)bpl * yy + bpp * x; //计算偏移的位置
lp=(BYTE *) lpPixel + le; //加上像素区域首地址
AfxMessageBox("2222");
return lp;
}

DWORD CDIB::pixel(int x,int y,DWORD c) //前提条件:x,y是像素列和行,c为0xffffffff时取,否则存
//执行结果:存入像素或取出像素
{
BYTE * lp;
DWORD dd=0;
lp = DibAddress (x,y);
if(lp =NULL) return 0;
if(c == 0xffffffff)
{
AfxMessageBox("3333");
memcpy(&dd,lp,bpp); //取像素数据 这里内存不能为读
}
else
{
AfxMessageBox("4444");
memcpy(lp,&c,bpp); //存像素数据内存不能为写[color=#FF0000][/color
}
return dd;
}
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯魔症 2008-04-13
  • 打赏
  • 举报
回复
谢谢了,真是学到不少哦,自己VC++刚刚入点门啊,吃饭回来结帖
cnzdgs 2008-04-13
  • 打赏
  • 举报
回复
if语句中使用=号编译时会有警告,最好养成习惯把所有警告都改掉。

调试的时候有一个很多窗口,Auto窗口显示当前时候的变量,还可以在Watch窗口中输入你要监视的变量,另外鼠标移到代码中的变量上面也会显示出变量的值。
疯魔症 2008-04-13
  • 打赏
  • 举报
回复
另外还有个问题,调试程序时我不知道应该怎么去查看变量的值,我只是用AfxMessageBox把程序断开
一步一步看,可能哪处错了。有什么方法把,变量的值,显示在文档中,或是用AfxMessageBox("x")
把变量显示出来
疯魔症 2008-04-13
  • 打赏
  • 举报
回复
真是笨阿,以前也犯过这种错误,真没记性
cnzdgs 2008-04-13
  • 打赏
  • 举报
回复
if(lp =NULL) return 0;
你这是把lp赋值为NULL,判断相等要用==。
疯魔症 2008-04-13
  • 打赏
  • 举报
回复
我调试时改了一下,原来是这样的
BYTE * CDIB::DibAddress(int x,int y) //取像素数据存储地址
{
BYTE * lp;
DWORD le;
int yy;

if(bitCount<8) //检查像素为数,只处理8位以上
{AfxMessageBox("本程序只处理 8 位以上的图像"); return 0;}
if((x<0) || (y<0) || (x>=(int)wid) || (y>=(int)hei)) //检查参数是否超出范围
{AfxMessageBox("参数超出范围");return 0;}

yy=hei -1-y; //调整y坐标
le=(DWORD)bpl * yy + bpp * x; //计算偏移的位置

lp=(BYTE *) lpPixel + le; //加上像素区域首地址

AfxMessageBox("2222");
return lp;
}
cnzdgs 2008-04-13
  • 打赏
  • 举报
回复
le=(int)bpl * yy + bpp * x; //计算偏移的位置
yy没有初始化。

19,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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