int preprocessing(char strFile[],IMAGEDATA imagedata,PIXEL **imagepixel,long *wid,long *hei)
{
FILE *fpi;
imagedata= NULL;//动态分配存储原图片的像素信息的二维数组
long *width,*height;//新定义一个像素结构体二维数组
width=wid;height=hei;
fpi=fopen(strFile,"rb");
if(fpi != NULL){
//先读取文件类型
WORD bfType;
fread(&bfType,1,sizeof(WORD),fpi);
if(0x4d42!=bfType)
{
cout<<"the file is not a bmp file!"<<endl;
return NULL;
}
//读取bmp文件的文件头和信息头
fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);
showBmpHead(strHead);//显示文件头
fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);
showBmpInforHead(strInfo);//显示文件信息头
//读取调色板
for(unsigned int nCounti=0;nCounti<strInfo.biClrUsed;nCounti++)
{
fread((char *)&(strPla[nCounti].rgbBlue),1,sizeof(BYTE),fpi);
fread((char *)&(strPla[nCounti].rgbGreen),1,sizeof(BYTE),fpi);
fread((char *)&(strPla[nCounti].rgbRed),1,sizeof(BYTE),fpi);
fread((char *)&(strPla[nCounti].rgbReserved),1,sizeof(BYTE),fpi);
}
width = &strInfo.biWidth;
height = &strInfo.biHeight;
//图像每一行的字节数必须是4的整数倍
*width = ((*width) * sizeof(IMAGEDATA) + 3) / 4 * 4;
*wid=*width;
*hei=*height;
imagedata = (IMAGEDATA)malloc((*width) * (*height) * sizeof(IMAGEDATA));
imagepixel=(PIXEL**)malloc(sizeof(PIXEL*)*(*height));
for(int w=0;w<(*height);w++)
{
imagepixel[w]=(PIXEL*)malloc(sizeof(PIXEL*)*(*width));
}
//初始化原始图片的像素数组以及新构造的像素数组
for(int i = 0;i < (*height);++i)
{
for(int j = 0;j < (*width);++j)
{
(*(imagedata + i * (*width )+ j)).blue = 0;
imagepixel[i][j].blue = 0;//系统提示这一句;
imagepixel[i][j].tag = 0;
imagepixel[i][j].t = i * (*width )+ j;
}
}
//fseek(fpi,54,SEEK_SET);
//读出图片的像素数据
fread(imagedata,sizeof(struct tagIMAGEDATA) (*width),(*height),fpi);
fclose(fpi);
for(i = 0;i <(*height);++i)
{
for(int j = 0;j < (*width);++j)
{
imagepixel[i][j].blue=((imagedata + i * (*width) + j)).blue;
}
}
processingpixel(imagedata,imagepixel,width,height);//对像素操作
}
else
{
cout<<"file open error!"<<endl;
return NULL;
}
fclose(fpi);
afterprocessing(imagedata,width,height);
return 0;
}
C++,为一个二维数组赋值,为什么到一半就停止了?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
0条回答
悬赏问题
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?