1、,建立一个ImageProcessing Wizard工程;
2、选择菜单里的工程->设置,选择C/C++选项卡,分类下拉条里选择Code Generation,然后在Struct member alignment中选择1 Byte;
3、通过CBmp类读入bmp文件;
4.给C~Dlg类添加一个成员变量CBmp* bmp;
5.在OninitDialog()内添加代码 :bmp=new CBmp;
bmp->load_bmp(“C:\cat.bmp”);
6.之后,读取原图、彩色图像灰度化、彩色图像反色变换、灰度图像反色变换,灰度图像阈值化处理代码如下:
void CImageTransformDlg::OnOK()
{
// TODO: Add extra validation here
//读取图像
for(int i=0;i<bmp->nWidth;i++)
for(int j=0;j<bmp->nHeight;j++)
{
struct rgb tx;
tx=bmp->pImageData[j*bmp->nWidth+i];
pDC->SetPixel(i,j,RGB(tx.red,tx.grn,tx.blu));
}
}
BOOL CImageTransformDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::DestroyWindow();
}
void CImageTransformDlg::OnButtonColorGrey()
{
// TODO: Add your control notification handler code here
//彩色图像灰度化
for(int i=0;i<bmp->nWidth;i++)
for(int j=0;j<bmp->nHeight;j++)
{
struct rgb tx;
tx=bmp->pImageData[j*bmp->nWidth+i];
int x=(tx.red+tx.grn+tx.blu)/3;
pDC->SetPixel(i,j,RGB(x,x,x));
}
}
void CImageTransformDlg::OnButtonAntiColor()
{
// TODO: Add your control notification handler code here
//彩色图像反色变换
for(int i=0;i<bmp->nWidth;i++)
for(int j=0;j<bmp->nHeight;j++)
{
struct rgb tx;
tx=bmp->pImageData[j*bmp->nWidth+i];
//int x=(tx.red+tx.grn+tx.blu)/3;
pDC->SetPixel(i,j,RGB(255-tx.red,255-tx.grn,255-tx.blu));
}
}
void CImageTransformDlg::OnButtonAntiGrey()
{
// TODO: Add your control notification handler code here
//灰度图像反色变换
for(int i=0;i<bmp->nWidth;i++)
for(int j=0;j<bmp->nHeight;j++)
{
struct rgb tx;
tx=bmp->pImageData[j*bmp->nWidth+i];
int x=(tx.red+tx.grn+tx.blu)/3;
pDC->SetPixel(i,j,RGB(255-x,255-x,255-x));
}
}
void CImageTransformDlg::OnButtonThresholding()
{
// TODO: Add your control notification handler code here
//阈值化
for(int i=0;i<bmp->nWidth;i++)
for(int j=0;j<bmp->nHeight;j++)
{
struct rgb tx;
tx=bmp->pImageData[j*bmp->nWidth+i];
int x=(tx.red+tx.grn+tx.blu)/3;
if(x>100)
x=255;
else
x=0;
pDC->SetPixel(i,j,RGB(x,x,x));
}
}
最后的结果如图: