?? tuxianghechengdib.cpp
字號:
p_temp1[DibWidth*j+i]=255;
}
}
memcpy(p_data, p_temp1,DibWidth*height); //復制處理后的圖像
delete []p_temp1;
delete []p_temp2;
}
}
///***************************************************************/
/*函數名稱:Feiyunsuan()
/*函數類型:void
/*功能:對圖像進行非運算。
/***************************************************************/
void TuXiangHeChengDib::Feiyunsuan()
{
int i,j; //循環變量
BYTE* p_data;//圖像指針
int wide,height; //原圖的高和寬
p_data=GetData();
if (m_pBitmapInfoHeader->biBitCount<9)//灰度圖像
wide=GetWidth();
else//24位真彩色
wide=GetDibWidthBytes();
height=GetHeight();
LPBYTE p_temp1=new BYTE[wide*height]; //新圖像緩沖區
memset(p_temp1,0,wide*height); //初始化為0
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_data[wide*j+i]>128)
p_temp1[wide*j+i]=1;
}
}
//進行每個像素的與運算
for(j=1;j<height-1;j++)
{
for(i=1;i<wide-1;i++)
{
if(p_temp1[wide*j+i]==0 )
p_temp1[wide*j+i]=255;
else
p_temp1[wide*j+i]=0;
}
}
memcpy(p_data,p_temp1,wide*height); //復制處理后的圖像
delete p_temp1;
}
///***************************************************************/
/*函數名稱:Huofei(LPBYTE p_data, LPBYTE p_dataBK,int wide,int height)
/*函數類型:void
/*參數說明:p_data 原圖像首地址
/* p_dataBK 背景圖像首地址
/* wide,height 原圖像的高和寬
/*功能:對圖像進行或非運算。
/***************************************************************/
void TuXiangHeChengDib::Huofei(LPBYTE p_data, LPBYTE p_dataBK, int wide, int height)
{
if (m_pBitmapInfoHeader->biBitCount<9)//灰度圖像
{
int i,j; //循環變量
LPBYTE temp1=new BYTE[wide*height]; //新圖像緩沖區
LPBYTE temp2=new BYTE[wide*height];
memset( temp1,0,wide*height);
memset( temp2,0,wide*height);
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_data[wide*j+i]>128)
temp1[wide*j+i]=1;
}
}
//對背景二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_dataBK[wide*j+i]>128)
temp2[wide*j+i]=1;
}
}
//進行每個像素的與運算
for(j=1;j<height-1;j++)
{
for(i=1;i<wide-1;i++)
{
if( temp2[wide*j+i]==0&& temp1[wide*j+i]==0)
temp1[wide*j+i]=255;
else
temp1[wide*j+i]=0;
}
}
memcpy(p_data, temp1,wide*height); //復制處理后的圖像
delete temp1;
delete temp2;
}
else//24位真彩色
{
int i,j; //循環變量
LPBYTE p_data; //原圖數據區指針
int wide,height,DibWidth; //原圖長、寬
p_data=this->GetData (); //取得原圖的數據區指針
wide=this->GetWidth (); //取得原圖的數據區寬度
height=this->GetHeight (); //取得原圖的數據區高度
DibWidth=this->GetDibWidthBytes(); //取得原圖的每行字節數
BYTE *p_temp1=new BYTE[height*DibWidth];
BYTE *p_temp2=new BYTE[height*DibWidth];
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<DibWidth;i++)
{
if(p_data[DibWidth*j+i]>128)
p_temp1[DibWidth*j+i]=1;
}
}
//對背景二值化
for(j=0;j<height;j++)
{
for(i=0;i<DibWidth;i++)
{
if(p_dataBK[DibWidth*j+i]>128)
p_temp2[DibWidth*j+i]=1;
}
}
//進行每個像素的與運算
for(j=1;j<height-1;j++)
{
for(i=3;i<DibWidth-3;i++)
{
if( p_temp2[DibWidth*j+i]==0&& p_temp1[DibWidth*j+i]==0)
p_temp1[DibWidth*j+i]=255;
else
p_temp1[DibWidth*j+i]=0;
}
}
memcpy(p_data, p_temp1,DibWidth*height); //復制處理后的圖像
delete []p_temp1;
delete []p_temp2;
}
}
///***************************************************************/
/*函數名稱:Yufei(LPBYTE p_data, LPBYTE p_dataBK,int wide,int height)
/*函數類型:void
/*參數說明:p_data 原圖像首地址
/* p_dataBK 背景圖像首地址
/* wide,height 原圖像的高和寬
/*功能:對圖像進行與非運算。
/***************************************************************/
void TuXiangHeChengDib::Yufei(LPBYTE p_data, LPBYTE p_dataBK, int wide, int height)
{
if (m_pBitmapInfoHeader->biBitCount<9)//灰度圖像
{
int i,j; //循環變量
PBYTE temp1=new BYTE[wide*height]; //新圖像緩沖區
LPBYTE temp2=new BYTE[wide*height];
memset( temp1,0,wide*height);
memset( temp2,0,wide*height);
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_data[wide*j+i]>128)
temp1[wide*j+i]=1;
}
}
//對背景二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_dataBK[wide*j+i]>128)
temp2[wide*j+i]=1;
}
}
//進行每個像素的與非運算
for(j=1;j<height-1;j++)
{
for(i=1;i<wide-1;i++)
{
if( temp2[wide*j+i]==1&& temp1[wide*j+i]==1)
temp1[wide*j+i]=0;
else
temp1[wide*j+i]=255;
}
}
memcpy(p_data, temp1,wide*height); //復制處理后的圖像
delete temp1;
delete temp2;
}
else//24位真彩色
{
int i,j; //循環變量
LPBYTE p_data; //原圖數據區指針
int wide,height,DibWidth; //原圖長、寬
p_data=this->GetData (); //取得原圖的數據區指針
wide=this->GetWidth (); //取得原圖的數據區寬度
height=this->GetHeight (); //取得原圖的數據區高度
DibWidth=this->GetDibWidthBytes(); //取得原圖的每行字節數
BYTE *p_temp1=new BYTE[height*DibWidth];
BYTE *p_temp2=new BYTE[height*DibWidth];
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<DibWidth;i++)
{
if(p_data[DibWidth*j+i]>128)
p_temp1[DibWidth*j+i]=1;
}
}
//對背景二值化
for(j=0;j<height;j++)
{
for(i=0;i<DibWidth;i++)
{
if(p_dataBK[DibWidth*j+i]>128)
p_temp2[DibWidth*j+i]=1;
}
}
//進行每個像素的與非運算
for(j=1;j<height-1;j++)
{
for(i=3;i<DibWidth-3;i++)
{
if( p_temp2[wide*j+i]==1&& p_temp1[DibWidth*j+i]==1)
p_temp1[DibWidth*j+i]=0;
else
p_temp1[DibWidth*j+i]=255;
}
}
memcpy(p_data, p_temp1,DibWidth*height); //復制處理后的圖像
delete []p_temp1;
delete []p_temp2;
}
}
///***************************************************************/
/*函數名稱:Yihuo(LPBYTE p_data, LPBYTE p_dataBK,int wide,int height)
/*函數類型:void
/*參數說明:p_data 原圖像首地址
/* p_dataBK 背景圖像首地址
/* wide,height 原圖像的高和寬
/*功能:對圖像進行異或運算。
/***************************************************************/
void TuXiangHeChengDib::Yihuo(LPBYTE p_data, LPBYTE p_dataBK, int wide, int height)
{
if (m_pBitmapInfoHeader->biBitCount<9)//灰度圖像
{
int i,j; //循環變量
LPBYTE temp1=new BYTE[wide*height]; //新圖像緩沖區
LPBYTE temp2=new BYTE[wide*height];
memset( temp1,0,wide*height);
memset( temp2,0,wide*height);
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_data[wide*j+i]>128)
temp1[wide*j+i]=1;
}
}
//對背景二值化
for(j=0;j<height;j++)
{
for(i=0;i<wide;i++)
{
if(p_dataBK[wide*j+i]>128)
temp2[wide*j+i]=1;
}
}
//進行每個像素的異或運算
for(j=1;j<height-1;j++)
{
for(i=1;i<wide-1;i++)
{
if( temp2[wide*j+i]+ temp1[wide*j+i]==1)
temp1[wide*j+i]=255;
else
temp1[wide*j+i]=0;
}
}
memcpy(p_data, temp1,wide*height); //復制處理后的圖像
delete temp1;
delete temp2;
}
else//24位真彩色
{
int i,j; //循環變量
LPBYTE p_data; //原圖數據區指針
int wide,height,DibWidth; //原圖長、寬
p_data=this->GetData (); //取得原圖的數據區指針
wide=this->GetWidth (); //取得原圖的數據區寬度
height=this->GetHeight (); //取得原圖的數據區高度
DibWidth=this->GetDibWidthBytes(); //取得原圖的每行字節數
BYTE *p_temp1=new BYTE[height*DibWidth];
BYTE *p_temp2=new BYTE[height*DibWidth];
//對原圖二值化
for(j=0;j<height;j++)
{
for(i=0;i<DibWidth;i++)
{
if(p_data[DibWidth*j+i]>128)
p_temp1[DibWidth*j+i]=1;
}
}
//對背景二值化
for(j=0;j<height;j++)
{
for(i=0;i<DibWidth;i++)
{
if(p_dataBK[DibWidth*j+i]>128)
p_temp2[DibWidth*j+i]=1;
}
}
//進行每個像素的異或運算
for(j=1;j<height-1;j++)
{
for(i=3;i<DibWidth-3;i++)
{
if( p_temp2[DibWidth*j+i]+ p_temp1[DibWidth*j+i]==1)
p_temp1[DibWidth*j+i]=255;
else
p_temp1[DibWidth*j+i]=0;
}
}
memcpy(p_data, p_temp1,DibWidth*height); //復制處理后的圖像
delete []p_temp1;
delete []p_temp2;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -