怎样指向将DIB位图的数据指针char* pdib转换为char** 类型赋值给中值滤波函数的形参

sunpanqing 2012-08-22 05:04:24
BOOL CImageProcess::LoadBmp(const char *pszFilename) //
{
CFile cf;
BITMAPFILEHEADER BFH;
DWORD dwDibSize;
BYTE *pDib,*pDib1;

if(!cf.Open(pszFilename,CFile::modeRead))
return(FALSE);
dwDibSize=cf.GetLength()-sizeof(BITMAPFILEHEADER);

if(m_pDib!=NULL) delete [] m_pDib;

pDib =new BYTE [dwDibSize]; //局部变量pDib指向位图信息和位图数据


if(pDib==NULL)
return(FALSE);

if(cf.Read(&BFH,sizeof(BITMAPFILEHEADER)) !=
sizeof(BITMAPFILEHEADER)||
BFH.bfType!='MB'||
cf.Read(pDib,dwDibSize)!=dwDibSize)
{
delete [] pDib;
return(FALSE);
}
m_pDib=pDib;
m_pBits=pDib+sizeof(BITMAPINFOHEADER)+
colors*sizeof(RGBQUAD); //pBits指向像素数据

BITMAPINFOHEADER *pBIH;

//m_pBI=(BITMAPINFO *) m_pDib;
pBIH=(BITMAPINFOHEADER *) m_pDib;

wid=pBIH->biWidth;
hei=pBIH->biHeight;

cf.Close();

pDib1=new BYTE [dwDibSize]; //pDib1指向申请的新空间,用来存储备份的位图信息和位图数据
if(pDib1==NULL) return(FALSE);
m_pDib1=pDib1;
memcpy(m_pDib1,m_pDib,dwDibSize); //pDib1的空间也有位图信息和位图数据
m_pBits1=pDib1+sizeof(BITMAPINFOHEADER)+
colors*sizeof(RGBQUAD); //pBits指向像素数据
RotateFlag=0;
return(TRUE);
}
//中值滤波函数
void CImageProcess::Median(BYTE **list1, BYTE **list0, int Dx, int Dy, int flag)
{
int i,j,buff1[20];

for (i=1;i<Dy-1;i++)
{
for (j=1;j<Dx-1;j++)
{

buff1[0] = list1[i-1][j]; // 取本点和四邻点
buff1[1] = list1[i][j];
buff1[2] = list1[i+1][j];
buff1[3] = list1[i][j-1];
buff1[4] = list1[i][j+1];
if (flag==9)
{
buff1[5] = list1[i-1][j-1]; // 补上斜角得九点
buff1[6] = list1[i-1][j+1];
buff1[7] = list1[i+1][j-1];
buff1[8] = list1[i+1][j+1];
}
list0[i][j] = (BYTE) MedValue(buff1, flag, flag/2);
// 排序取中值,输出结果
}
}
}
int CImageProcess::MedValue(int *buf, int n, int m) // 排序取中值
{
int i,j,k,f;

for (i=1;i<n;i++) { // 冒泡排序
f=0; // 交换标志清零
for (j=n-1;j>=i;j--) {
if (buf[j]>buf[j+1]) { // 比较
k=buf[j]; buf[j]=buf[j+1]; // 两数交换,置标志
buf[j+1]=k; f=1;
}
}
if (f==0) break; // 无交换,退出
}
return(buf[m]); // 取中值返回
}
...全文
110 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,468

社区成员

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

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