📄 watermark.cpp
字号:
dlgPointGrayStretch.m_nGrayX1=nGrayX1;
dlgPointGrayStretch.m_nGrayX2=nGrayX2;
dlgPointGrayStretch.m_nGrayY1=nGrayY1;
dlgPointGrayStretch.m_nGrayY2=nGrayY2;
CImageVisualDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
long i,j,l;
long lgSizePicture;
int *pn;
BYTE *pb;
if(dlgPointGrayStretch.DoModal()!=IDOK)
{
return;
}
nGrayX1=dlgPointGrayStretch.m_nGrayX1;
nGrayX2=dlgPointGrayStretch.m_nGrayX2;
nGrayY1=dlgPointGrayStretch.m_nGrayY1;
nGrayY2=dlgPointGrayStretch.m_nGrayY2;
delete dlgPointGrayStretch;
lgSizePicture=(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth;
if( pDoc->m_nOriBitCount== 8 )
{
for(i=0;i<lgSizePicture;i++)
{
if(*(pDoc->pnOriPic+i)<nGrayX1)
{
*(pDoc->pnOriPic+i)=(int)(((float)*(pDoc->pnOriPic+i)*(float)nGrayY1)/(float)(nGrayX1));
}else if((*(pDoc->pnOriPic+i)>=nGrayX1) && (*(pDoc->pnOriPic+i)<=nGrayX2))
{
*(pDoc->pnOriPic+i)=(int)(((float)*(pDoc->pnOriPic+i)-(float)nGrayX1)*((float)nGrayY2-(float)nGrayY1)/((float)nGrayX2-(float)nGrayX1)+(float)nGrayY1);
}else if(*(pDoc->pnOriPic+i)>nGrayX2)
{
*(pDoc->pnOriPic+i)=(int)(((float)*(pDoc->pnOriPic+i)-(float)nGrayX1)*(255.0-(float)nGrayY2)/(255.0-(float)nGrayX2)+(float)nGrayY2);
}
}
}
else if( pDoc->m_nOriBitCount==24 )
{
for(i=0;i<lgSizePicture;i++)
{
for(int p=0;p<3;p++)
{
if(*(pDoc->pnOriPic+i)<nGrayX1)
{
*(pDoc->pnOriPic+3*i+p)=(int)(((float)*(pDoc->pnOriPic+3*i+p)*(float)nGrayY1)/(float)(nGrayX1));
}else if((*(pDoc->pnOriPic+3*i+p)>=nGrayX1) && (*(pDoc->pnOriPic+3*i+p)<=nGrayX2))
{
*(pDoc->pnOriPic+3*i+p)=(int)(((float)*(pDoc->pnOriPic+3*i+p)-(float)nGrayX1)*((float)nGrayY2-(float)nGrayY1)/((float)nGrayX2-(float)nGrayX1)+(float)nGrayY1);
}else if(*(pDoc->pnOriPic+3*i+p)>nGrayX2)
{
*(pDoc->pnOriPic+3*i+p)=(int)(((float)*(pDoc->pnOriPic+3*i+p)-(float)nGrayX1)*(255.0-(float)nGrayY2)/(255.0-(float)nGrayX2)+(float)nGrayY2);
}
}
}
}
pb=pDoc->pbOriStatic;
pn=pDoc->pnOriPic;
if(pDoc->m_nOriBitCount==24)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
for(l=0;l<3;l++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for l
} //for i
if(((pDoc->m_nOriWidth*3)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
}
}
}else if(pDoc->m_nOriBitCount==8)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for i
if(((pDoc->m_nOriWidth)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
}
}
}
pDoc->pbOriStatic=pb;
pDoc->pnOriPic=pn;
Invalidate();
}
void CImageVisualView::OnPointInteEqualize()
{
// TODO: Add your command handler code here
CImageVisualDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int nSizePic;
nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
int i,p;
int nNumberPoint[256],nColorNumber[256][3],nSumNumberPoint[256],nSumColorNumber[256][3];
for(i=0;i<256;i++)
{
nNumberPoint[i]=0;
for(p=0;p<3;p++)
nColorNumber[i][p]=0;
}
if(pDoc->m_nOriBitCount==8)
{
for(i=0;i<nSizePic;i++)
{
nNumberPoint[*(pDoc->pnOriPic+i)]++;
}
}else if(pDoc->m_nOriBitCount==24)
{
for(i=0;i<nSizePic;i++)
{
for(p=0;p<3;p++)
{
nColorNumber[*(pDoc->pnOriPic+i*3+p)][p]++;
}
}
}
if(pDoc->m_nOriBitCount==8)
{
nSumNumberPoint[0]=nNumberPoint[0];
for(i=1;i<256;i++)
{
nSumNumberPoint[i]=nSumNumberPoint[i-1]+nNumberPoint[i];
}
}else if(pDoc->m_nOriBitCount==24)
{
for(p=0;p<3;p++)
{
nSumColorNumber[0][p]=nColorNumber[0][p];
}
for(i=1;i<256;i++)
{
for(p=0;p<3;p++)
{
nSumColorNumber[i][p]=nSumColorNumber[i-1][p]+nColorNumber[i][p];
}
}
}
if( pDoc->m_nOriBitCount== 8 )
{
for(i=0;i<nSizePic;i++)
{
*(pDoc->pnOriPic+i)=(int)(((float)nSumNumberPoint[*(pDoc->pnOriPic+i)]*255.0)/(float)(nSizePic));
}
}
else if( pDoc->m_nOriBitCount==24 )
{
for(i=0;i<nSizePic;i++)
{
for(int p=0;p<3;p++)
{
*(pDoc->pnOriPic+3*i+p)=(int)(((float)nSumColorNumber[*(pDoc->pnOriPic+3*i+p)][p]*255.0)/(float)(nSizePic));
}
}
}
int *pn;
BYTE *pb;
int j,l;
pb=pDoc->pbOriStatic;
pn=pDoc->pnOriPic;
if(pDoc->m_nOriBitCount==24)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
for(l=0;l<3;l++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for l
} //for i
if(((pDoc->m_nOriWidth*3)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
}
}
}else if(pDoc->m_nOriBitCount==8)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for i
if(((pDoc->m_nOriWidth)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
}
}
}
pDoc->pbOriStatic=pb;
pDoc->pnOriPic=pn;
Invalidate();
}
void CImageVisualView::OnGeoTranslation()
{
// TODO: Add your command handler code here
int nOffSetX=50;
int nOffSetY=50;
CImageVisualDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i,j;
CDialogGeoTranslation dlgGeoTranslation;
int *pnTemp;
dlgGeoTranslation.m_nOffSetX=nOffSetX;
dlgGeoTranslation.m_nOffSetY=nOffSetY;
int nSizePic;
nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
if(dlgGeoTranslation.DoModal()!=IDOK)
{
return;
}
nOffSetX=dlgGeoTranslation.m_nOffSetX;
nOffSetY=dlgGeoTranslation.m_nOffSetY;
if( pDoc->m_nOriBitCount== 8 )
{
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
for(i=0;i<pDoc->m_nOriHeight;i++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
if(j<nOffSetX || i<nOffSetY)
{
*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j)=255;
}else
{
*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j)=*(pnTemp+(pDoc->m_nOriHeight-i-1+nOffSetY)*pDoc->m_nOriWidth+j-nOffSetX);
}
}
}
// memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
}
else if( pDoc->m_nOriBitCount==24 )
{
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
for(i=0;i<pDoc->m_nOriHeight;i++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
for(int p=0;p<3;p++)
{
if(j<nOffSetX || i<nOffSetY)
{
*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p)=255;
}else
{
*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p)=*(pnTemp+(pDoc->m_nOriHeight-i-1+nOffSetY)*pDoc->m_nOriWidth*3+(j-nOffSetX)*3+p);
}
}
}
}
// memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
}
int *pn;
BYTE *pb;
int l;
pb=pDoc->pbOriStatic;
pn=pDoc->pnOriPic;
if(pDoc->m_nOriBitCount==24)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
for(l=0;l<3;l++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for l
} //for i
if(((pDoc->m_nOriWidth*3)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
}
}
}else if(pDoc->m_nOriBitCount==8)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for i
if(((pDoc->m_nOriWidth)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
}
}
}
pDoc->pbOriStatic=pb;
pDoc->pnOriPic=pn;
Invalidate();
free(pnTemp);
}
void CImageVisualView::OnGeoMirrorS()
{
// TODO: Add your command handler code here
int nOffSetX=50;
int nOffSetY=50;
CImageVisualDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i,j;
int *pnTemp;
int nSizePic;
nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
if( pDoc->m_nOriBitCount== 8 )
{
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
for(i=0;i<pDoc->m_nOriHeight;i++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+(pDoc->m_nOriWidth-1-j));
}
}
// memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
}
else if( pDoc->m_nOriBitCount==24 )
{
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
for(i=0;i<pDoc->m_nOriHeight;i++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
for(int p=0;p<3;p++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+(pDoc->m_nOriWidth-1-j)*3+p);
}
}
}
}
// memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
}
int *pn;
BYTE *pb;
int l;
pb=pDoc->pbOriStatic;
pn=pDoc->pnOriPic;
if(pDoc->m_nOriBitCount==24)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
for(l=0;l<3;l++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for l
} //for i
if(((pDoc->m_nOriWidth*3)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
}
}
}else if(pDoc->m_nOriBitCount==8)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for i
if(((pDoc->m_nOriWidth)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
}
}
}
pDoc->pbOriStatic=pb;
pDoc->pnOriPic=pn;
Invalidate();
free(pnTemp);
}
void CImageVisualView::OnGeoMirrorH()
{
// TODO: Add your command handler code here
int nOffSetX=50;
int nOffSetY=50;
CImageVisualDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i,j;
int *pnTemp;
int nSizePic;
nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
if( pDoc->m_nOriBitCount== 8 )
{
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
for(i=0;i<pDoc->m_nOriHeight;i++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
*(pDoc->pnOriPic+i*pDoc->m_nOriWidth+j)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j);
}
}
// memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
}
else if( pDoc->m_nOriBitCount==24 )
{
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic*3 );
for(i=0;i<pDoc->m_nOriHeight;i++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
for(int p=0;p<3;p++)
{
for(j=0;j<pDoc->m_nOriWidth;j++)
{
*(pDoc->pnOriPic+i*pDoc->m_nOriWidth*3+j*3+p)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p);
}
}
}
}
// memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
}
int *pn;
BYTE *pb;
int l;
pb=pDoc->pbOriStatic;
pn=pDoc->pnOriPic;
if(pDoc->m_nOriBitCount==24)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
for(l=0;l<3;l++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for l
} //for i
if(((pDoc->m_nOriWidth*3)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
}
}
}else if(pDoc->m_nOriBitCount==8)
{
for(j=0;j<pDoc->m_nOriHeight;j++){
for(i=0;i<pDoc->m_nOriWidth ;i++){
*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
pDoc->pnOriPic=pDoc->pnOriPic+1;
pDoc->pbOriStatic=pDoc->pbOriStatic+1;
} //for i
if(((pDoc->m_nOriWidth)%4)!=0){ //加入附加字节
pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
}
}
}
pDoc->pbOriStatic=pb;
pDoc->pnOriPic=pn;
Invalidate();
free(pnTemp);
}
void CImageVisualView::OnGeoRotation()
{
// TODO: Add your command handler code here
CImageVisualDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_boolFlag=FALSE;
int i,j,x;
CFile fOutFile;
int *pnTemp,*pnT;
int nSizePic;
int nNewWidth,nNewHeight;
int *pn3T;
BITMAPFILEHEADER BF;
BITMAPINFOHEADER BI;
BYTE *lpTemp; //写入图像数据指针
BYTE *lpo;
nNewWidth=pDoc->m_nOriHeight;
nNewHeight=pDoc->m_nOriWidth;
nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
pnT=new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
if( pDoc->m_nOriBitCount== 8 )
{
memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
pn3T=new int[(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
for(i=0;i<nNewHeight;i++)
{
for(j=0;j<nNewWidth;j++)
{
*(pnT+i*nNewWidth+j)=*(pnTemp+(nNewWidth-1-j)*nNewHeight+i);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -