求位平面分解的函数

bigowner 2011-04-05 09:18:01
下面程序我自己编的针对24位BMP位平面分解与显示的程序,其中位平面分解函数是改动的一个处理8位灰度图像的一个api函数,但是结果只能处理一副图像的一半还不知道处理的对不对,并且只能到第8副图像,(应该有24副吧),求各位大神帮忙看看,代码如下:
BOOL Crenwu1_1View::DIBBITPLANE(CDib * pDib, BYTE bBitNum)
{
// 如果输入的数不符合要求,不进行分解
if(bBitNum <1 || bBitNum >24)
return FALSE;

// 指向源图像的指针
BYTE * lpSrc;

//图象的宽度和高度
LONG lWidth;
LONG lHeight;

// 图像每行的字节数
LONG lLineBytes;

// 循环变量
LONG i;
LONG j;

// 中间变量
BYTE bTemp;
BYTE bA;

// 二进制第i位对应的十进制值
BYTE bCount;

//得到图象的宽度和高度
CSize SizeDim;
SizeDim = pDib->GetDimension();
lWidth = SizeDim.cx;
lHeight = SizeDim.cy;

//得到实际的Dib图象存储大小
CSize SizeRealDim;
SizeRealDim = pDib->GetDibSaveDim();

// 计算图像每行的字节数
lLineBytes = SizeRealDim.cx;

//图像数据的指针
LPBYTE lpDIBBits = pDib->m_lpData;

bCount = 1<<(bBitNum - 1);

for (i = 0; i<lHeight; i++)
{
for ( j = 0; j < lWidth; j++)
{
// 指向位图i行j列的指针
lpSrc = (BYTE *)lpDIBBits + j+lLineBytes * (lHeight - 1 - i);

// 对位图按灰度码进行分解
if(bBitNum == 8)
{
// 如果求的是位图24,直接取二值的第2^24位
bTemp = (*(lpSrc) & bCount) / bCount;
bTemp=bTemp*255;//test1
//bTemp = bTemp * (2^24-1);//test1
}
else
{
// 否则进行异或,求得灰度码
bTemp = (*(lpSrc) & bCount) / bCount;
bA = bCount * 2;

// 第i+1位图的象素值
bA = (*(lpSrc) & bA) / bA;

// 异或
//bTemp = (bTemp ^ bA) * (2^24-1);//test1
bTemp=(bTemp ^ bA) *255;//test1
}

// 更新源图象
*(lpSrc) = bTemp;
}
}

// 返回值
return TRUE;
}

void Crenwu1_1View::OnCodingBitplane()
{
CDlgBitPlane dlgCoding;
dlgCoding.DoModal();
BYTE bBitNum = dlgCoding.m_BItNumber;
Crenwu1_1Doc * pDoc = GetDocument();
CDib * pDib = pDoc->m_pDibInit;



//LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBmpInfoHeader;(这句没用了)

/* 判断是否是24-bmp位图(这里为了方便,只处理24-bmp位图的位平面分解)*/
if (Cdib.GetBitCount() != 24)
{
// 提示用户
MessageBox("目前只支持24位图的位平面分解!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);

// 返回
return;
}
DIBBITPLANE(&Cdib,dlgCoding.m_BItNumber);
//statedoc=1;

// 设置脏标记
pDoc->SetModifiedFlag(TRUE);

// 更新视图
pDoc->UpdateAllViews(NULL);
// TODO: 在此添加命令处理程序代码
}



这是第一位平面

这是第8位平面
谢谢!!
...全文
115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigowner 2011-04-05
  • 打赏
  • 举报
回复

19,469

社区成员

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

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