c++进行数字图像处理时的一个数据溢出的问题

voidCAporPicFrameDoc::Onsmall(){//TODO:Addyourcommandhandlercodehereintwidth=m_dib.Ge... void CAporPicFrameDoc::Onsmall()
{
// TODO: Add your command handler code here
int width = m_dib.GetDimensions().cx ; //获取宽度信息
int height = m_dib.GetDimensions().cy ; //获取高度信息
int bytesize = m_dib.GetSizePerLine() ; //获取每一行像素存储空间的大小
int nwidth = width/2;
int nheight = height/2;
int m_bit=bytesize/width;
LPBYTE image = m_dib.m_lpImage ; //申请新的矩阵并获取图像信息
LPBYTE Nimage = new BYTE[nwidth*m_bit*nheight]; //分别加上一个1,从而避免溢出
//memset(Nimage,0,nwidth*m_bit*nheight);
//LPBYTE Nimage = new BYTE[height*bytesize];
memset(Nimage,255,(height*bytesize));
for(int i=0;i<nheight;i++){
for(int j=0;j<nwidth;j++){
for(int k=0;k<m_bit;k++){
Nimage[i*nwidth*m_bit+j*m_bit+k] = image[i*2*bytesize+j*2*m_bit+k];
}
}

}
delete[]image;//删除原来图像指针
m_dib.m_lpImage = Nimage ;//将处理后的图像指针赋给当前画布
UpdateAllViews(FALSE) ;//更新画布
}
原来的问题解决了。。但是新生成的图像是倾斜的并且是灰色。。循环哪里出错了啊?
展开
 我来答
sk8992
2012-02-05 · 超过24用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:70.5万
展开全部
Nimage[i*nwidth*m_bit+j*m_bit+k] = image[i*2*bytesize+j*2*m_bit+k];
肯定是这句话,出错了。
如果我没有搞错的话,应该是
Nimage[i*nwidth*m_bit+j*m_bit+k] = image[i*2*bytesize+j*m_bit+k*2];
追问
其实问题找到了,是里面在对位宽的处理上有问题,不过还是感谢你的解答
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式