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) ;//更新画布
}
原来的问题解决了。。但是新生成的图像是倾斜的并且是灰色。。循环哪里出错了啊? 展开
{
// 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) ;//更新画布
}
原来的问题解决了。。但是新生成的图像是倾斜的并且是灰色。。循环哪里出错了啊? 展开
1个回答
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询