⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myfile.cpp

📁 数字摄影测量相关算法编程,在VC环境下实现影像特征点提取.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
              data[offset1+j]=abs(dataL[offset1+j]-dataR[offset2+j+xx_offset]);
		    }
		  }
		}
	}

	
#ifdef _MAC
	// First swap the size field
	*((LPDWORD)pDIB) = SWAPLONG(*((LPDWORD)pDIB));

	// Now swap the rest of the structure
	ByteSwapInfo(pDIB, IS_WIN30_DIB(pDIB));
	
#endif
	
	::GlobalUnlock((HGLOBAL) hDIB1);
	::GlobalUnlock((HGLOBAL) hDIB2);
	::GlobalUnlock((HGLOBAL) hDIB);
	
	return hDIB;
}

*/
int   WINAPI MyDIBCheck(HDIB hDIB)
{
	
	LPBITMAPINFOHEADER bminfoHeader;
	LPSTR pDIB;
	
	/*
	 * Check BitCount for DIB
	 */
	pDIB=(LPSTR) ::GlobalLock((HGLOBAL) hDIB);
		
	bminfoHeader= (LPBITMAPINFOHEADER)pDIB;
		
	::GlobalUnlock((HGLOBAL) hDIB);
	
	return bminfoHeader->biBitCount;
}
/*
void  WINAPI DIBTurn(HDIB hDIB,TurnFlag flag)
{
	
	LPBITMAPINFOHEADER bminfoHeader;
	LPSTR pDIB,tempDIB,data,tdata;
	HDIB  temphDIB;
	int palettesize ,width,height;
	LPixel24bits  datargb,tdatargb;


	pDIB=(LPSTR) ::GlobalLock((HGLOBAL) hDIB);
		
	bminfoHeader= (LPBITMAPINFOHEADER)pDIB;
	
	width = bminfoHeader->biWidth;
    height =bminfoHeader->biHeight;

	
    DWORD dwBitsSize;
	if(bminfoHeader->biBitCount!=24)
		dwBitsSize=width*height;
	else
        dwBitsSize=width*height*3;
    		
	if(bminfoHeader->biSizeImage!=dwBitsSize){
	MessageBox(0,"sorry cant read compress image",0,MB_ICONWARNING);
	  return;
	}

	temphDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,dwBitsSize);

	if (hDIB == 0 )
	{
		return ;
	}

	tempDIB = (LPSTR) ::GlobalLock((HGLOBAL) temphDIB);
	
	switch(bminfoHeader->biBitCount)
			{
			  case   1:  palettesize =  2; break;
			  case   4:  palettesize  =16; break;
			  case   8:  palettesize =256; break;
			  case  24:  palettesize =  0; break;
			  default: return;

			 }
	
	BYTE GrayMax=palettesize-1;
	/*
	 * Go read the bits.
	 */
	
/*	data=pDIB+sizeof(BITMAPINFOHEADER)+palettesize* sizeof(RGBQUAD);
	
	int i,j,offset1,offset2;

	for(i=0;i<(int)dwBitsSize;i++)
	 	 tempDIB[i]=data[i];
	
	if(palettesize==0){
	   tdatargb=(LPixel24bits)tempDIB;
	   datargb =(LPixel24bits)data;
	   }
	else
	   tdata   =tempDIB;

  if(palettesize==0)
  {
    if(flag==Left)
	  {	
	  for(i=0;i<width;i++)
	     {
	    	offset1=i*height;
		    for(j=0;j<height;j++)
		      {
		      offset2=(height-1-j)*width;
		      datargb[offset1+j].r=tdatargb[offset2+i].r;
			  datargb[offset1+j].g=tdatargb[offset2+i].g;
			  datargb[offset1+j].b=tdatargb[offset2+i].b;
		  	}//j circle
	     }//i circle
	  }
	if(flag==Right)
	  {
	  for(i=0;i<width;i++)
	     {
	    	offset1=(width-1-i)*height;
		    for(j=0;j<height;j++)
		      {
		      offset2=j*width;
		      datargb[offset1+j].r=tdatargb[offset2+i].r;
			  datargb[offset1+j].g=tdatargb[offset2+i].g;
			  datargb[offset1+j].b=tdatargb[offset2+i].b;
		  	}//j circle
	     }//i circle
	   }
	 if(flag==UpDown)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			offset2=i*width;
		    for(j=0;j<width;j++)
		      {
		      datargb[offset1+j].r=tdatargb[offset2+j].r;
			  datargb[offset1+j].g=tdatargb[offset2+j].g;
			  datargb[offset1+j].b=tdatargb[offset2+j].b;
		  	}//j circle
	     }//i circle
	   }
	  if(flag==DownUp)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset2=(height-1-i)*width;
			offset1=i*width;
		    for(j=0;j<width;j++)
		      {
		      datargb[offset1+j].r=tdatargb[offset2+j].r;
			  datargb[offset1+j].g=tdatargb[offset2+j].g;
			  datargb[offset1+j].b=tdatargb[offset2+j].b;
		  	}//j circle
	     }//i circle
	   }
	  if(flag==LeftRight)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			
		    for(j=0;j<width;j++)
		      {
		      datargb[offset1+j].r=tdatargb[offset1+width-j].r;
			  datargb[offset1+j].g=tdatargb[offset1+width-j].g;
			  datargb[offset1+j].b=tdatargb[offset1+width-j].b;
		  	}//j circle
	     }//i circle
	   }
	 if(flag==RightLeft)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			
		    for(j=0;j<width;j++)
		      {
		      datargb[offset1+width-j].r=tdatargb[offset1+j].r;
			  datargb[offset1+width-j].g=tdatargb[offset1+j].g;
			  datargb[offset1+width-j].b=tdatargb[offset1+j].b;
		  	}//j circle
	     }//i circle
	   }
	  if(flag==GrayInverse)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			
		    for(j=0;j<width;j++)
		      {
			   datargb[offset1+j].r=GrayMax-tdatargb[offset1+j].r;
			  datargb[offset1+j].g=GrayMax-tdatargb[offset1+j].g;
			  datargb[offset1+j].b=GrayMax-tdatargb[offset1+j].b;
		  	}//j circle
	     }//i circle
	   }
   }
   else	 //else if palettesize
   {
	 if(flag==Left)
	  {
	   for(i=0;i<width;i++)
	     {
		  offset1=i*height;
		  for(j=0;j<height;j++)
		   {
		    offset2=(height-1-j)*width;
		    data[offset1+j]=tdata[offset2+i];
		  
		   }//j circle
	     }//i circle
	   }
	 if(flag==Right)
	  {
	  for(i=0;i<width;i++)
	     {
		  offset1=(width-1-i)*height;
		  for(j=0;j<height;j++)
		   {
		    offset2=j*width;
		    data[offset1+j]=tdata[offset2+i];
		  
		   }//j circle
	     }//i circle
	  }
	 if(flag==UpDown)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			offset2=i*width;
		    for(j=0;j<width;j++)
		      {
		      data[offset1+j]=tdata[offset2+j];
			 }//j circle
	     }//i circle
	   }
	  if(flag==DownUp)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset2=(height-1-i)*width;
			offset1=i*width;
		    for(j=0;j<width;j++)
		      {
		      data[offset1+j]=tdata[offset2+j];
			  
		  	}//j circle
	     }//i circle
	   }
	  if(flag==LeftRight)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			
		    for(j=0;j<width;j++)
		      {
		      data[offset1+j]=tdata[offset1+width-j];
			  
		  	}//j circle
	     }//i circle
	   }
	 if(flag==RightLeft)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			
		    for(j=0;j<width;j++)
		      {
		      data[offset1+width-j]=tdata[offset1+j];
			  
		  	}//j circle
	     }//i circle
	   }
	 if(flag==GrayInverse)
	  {
	  for(i=0;i<height;i++)
	     {
	    	offset1=(height-1-i)*width;
			
		    for(j=0;j<width;j++)
		      {
		      data[offset1+j]=GrayMax-tdata[offset1+j];
			  
		  	}//j circle
	     }//i circle
	   }
	
   }//end if palettesize
 ::GlobalUnlock((HGLOBAL) temphDIB);
 ::GlobalFree((HGLOBAL) temphDIB);
	
   if(flag==Left||flag==Right)
    {
	 bminfoHeader->biWidth=height;
     bminfoHeader->biHeight=width;
    }

#ifdef _MAC
	// First swap the size field
	*((LPDWORD)pDIB) = SWAPLONG(*((LPDWORD)pDIB));

	// Now swap the rest of the structure
	ByteSwapInfo(pDIB, IS_WIN30_DIB(pDIB));
#endif
   
	::GlobalUnlock((HGLOBAL) hDIB);
	
	return ;
}
*/
HDIB  WINAPI MyDIBCopy(HDIB hDIBO)
{
	
	LPBITMAPINFOHEADER bminfoHeader;
	DWORD dwBitsSize;
	HDIB hDIB;
	LPSTR pDIB,pDIBO;
	int palettesize ;

	/*
	 * Allocate memory for DIB
	 */
	pDIBO=(LPSTR) ::GlobalLock((HGLOBAL) hDIBO);
		
	bminfoHeader= (LPBITMAPINFOHEADER)pDIBO;
	
	switch(bminfoHeader->biBitCount)
			{
			  case   1:  palettesize =  2; break;
			  case   4:  palettesize  =16; break;
			  case   8:  palettesize =256; break;
			  case  24:  palettesize =  0; break;
			  default: return NULL;

			 }
	
	dwBitsSize=sizeof(BITMAPINFOHEADER)
		        +palettesize*sizeof(RGBQUAD)
				+bminfoHeader->biSizeImage;

	hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,dwBitsSize);

	if (hDIB == 0 )
	{
		return NULL;
	}

	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
	int i;	
	for(i=0;i<(int)dwBitsSize;i++)
	   pDIB[i]=pDIBO[i];

	
#ifdef _MAC
	// First swap the size field
	*((LPDWORD)pDIB) = SWAPLONG(*((LPDWORD)pDIB));
	
	// Now swap the rest of the structure
	ByteSwapInfo(pDIB, IS_WIN30_DIB(pDIB));
	
#endif
	
	::GlobalUnlock((HGLOBAL) hDIBO);
	::GlobalUnlock((HGLOBAL) hDIB);
	
	return hDIB;
}
/*
HDIB  WINAPI MyDIBZoomCopy(HDIB hDIBO,int x0,int y0,int width,int height,int zoom)
{
	
	LPBITMAPINFOHEADER bminfoHeader;
	DWORD dwBitsSize;
	HDIB hDIB;
	LPSTR pDIB,pDIBO,data,dataO;
	LPixel24bits  datargb,datargbO;
	int palettesize,BytesPerPixel ;
	int widthO,heightO;

	/*
	 * Allocate memory for DIB
	 */
/*	pDIBO=(LPSTR) ::GlobalLock((HGLOBAL) hDIBO);
		
	bminfoHeader= (LPBITMAPINFOHEADER)pDIBO;

	switch(bminfoHeader->biBitCount)
			{
			  case   1:  palettesize =  2;BytesPerPixel=1; break;
			  case   4:  palettesize  =16;BytesPerPixel=1; break;
			  case   8:  palettesize =256;BytesPerPixel=1; break;
			  case  24:  palettesize =  0;BytesPerPixel=3; break;
			  default: return NULL;

			 }
	widthO =bminfoHeader->biWidth;
	heightO=bminfoHeader->biHeight;

	dwBitsSize=sizeof(BITMAPINFOHEADER)
		        +palettesize*sizeof(RGBQUAD)
				+width*height*BytesPerPixel;

	hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,dwBitsSize);

	if (hDIB == 0 )
	{
		return NULL;
	}

	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
		
	int i,j,k,l;	
	for(i=0;i<(int)(sizeof(BITMAPINFOHEADER)+palettesize*sizeof(RGBQUAD));i++)
	   pDIB[i]=pDIBO[i];
	
	LPBITMAPINFOHEADER p_bminfo = (LPBITMAPINFOHEADER)pDIB;
	p_bminfo->biWidth  = width;
    p_bminfo->biHeight = height;
	p_bminfo->biSizeImage = (long)(height)*(long)(width)*BytesPerPixel;
    
	data =pDIB +sizeof(BITMAPINFOHEADER)+palettesize* sizeof(RGBQUAD);
	dataO=pDIBO+sizeof(BITMAPINFOHEADER)+palettesize* sizeof(RGBQUAD);
	
	
	if(palettesize==0){
	   datargb =(LPixel24bits)data;
	   datargbO=(LPixel24bits)dataO;
	   }
	
	int offset1,offset2;
    int ii,jj,ti,tj;
	
	for(i=(-height/2*zoom);i<=(height/2*zoom);i=i+zoom)
	{ 
		ii=y0+i/zoom;
		offset2=(heightO-1-ii)*widthO;
		
		if((ii>0)&&(ii<heightO))
		{
		 for(j=(-width/2*zoom);j<(width/2*zoom);j=j+zoom)
		  {
		   jj=x0+j/zoom;

		   if((jj>0)&&(jj<widthO))
		   {
			for(k=(-zoom/2);k<=(zoom/2);k++)
			{
			 for(l=(-zoom/2);l<=(zoom/2);l++)
			  {
			   ti=i+k+height/2;
			   tj=j+l+width/2;
			   if((ti>0)&&(ti<height)&&(tj>0)&&(tj<width))
			   {
				offset1=(height-1-ti)*width;
                if(palettesize!=0)
		         {
			      data[offset1+tj]=dataO[offset2+jj];
		         }
		        if(palettesize==0)
		         {
			      datargb[offset1+tj].r=datargbO[offset2+jj].r;
			      datargb[offset1+tj].g=datargbO[offset2+jj].g;
			      datargb[offset1+tj].b=datargbO[offset2+jj].b;
		         }
			   }//end ti,tj if
			 }//end l circle
			}//end k circle
		   }//end jj if
		 }//end j circle
		}//end ii if
	}//end i circle

	
#ifdef _MAC
	// First swap the size field
	*((LPDWORD)pDIB) = SWAPLONG(*((LPDWORD)pDIB));
	
	// Now swap the rest of the structure
	ByteSwapInfo(pDIB, IS_WIN30_DIB(pDIB));
	
#endif
	::GlobalUnlock((HGLOBAL) hDIBO);
	::GlobalUnlock((HGLOBAL) hDIB);
	
	return hDIB;
}

HDIB  WINAPI GetRedOfREDGREEN(HDIB hDIBRedGreen)
{
	
	LPBITMAPINFOHEADER RGbminfoHeader;
	DWORD dwBitsSizeR;
	HDIB hDIB;
	LPSTR pDIB,pDIBRG,data;
	LPixel24bits  datarg;
  	
	/*
	 * Allocate memory for DIB
	 */
/*	pDIBRG=(LPSTR) ::GlobalLock((HGLOBAL) hDIBRedGreen);
		
	RGbminfoHeader= (LPBITMAPINFOHEADER)pDIBRG; 
		
	dwBitsSizeR=sizeof(BITMAPINFOHEADER)
		        +256*sizeof(RGBQUAD)
				+RGbminfoHeader->biWidth*RGbminfoHeader->biHeight;

	hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,dwBitsSizeR);

	if (hDIB == 0 )
	{
		return NULL;
	}

	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
		
	
	LPBITMAPINFOHEADER p_bminfo = (LPBITMAPINFOHEADER)pDIB;
	p_bminfo->biSize = sizeof(BITMAPINFOHEADER);
    p_bminfo->biWidth = RGbminfoHeader->biWidth;
    p_bminfo->biHeight =RGbminfoHeader->biHeight;
    p_bminfo->biPlanes = 1;
    p_bminfo->biBitCount =8;
    p_bminfo->biCompression = BI_RGB;
    p_bminfo->biSizeImage = (long)RGbminfoHeader->biWidth* 
                            (long)RGbminfoHeader->biHeight;
    p_bminfo->biXPelsPerMeter = 0;
    p_bminfo->biYPelsPerMeter = 0;
    p_bminfo->biClrUsed = 0;
    p_bminfo->biClrImportant = 0;


	/*
	 * Go read the bits.
	 */
	
/*	datarg=(LPixel24bits)(pDIBRG+sizeof(BITMAPINFOHEADER)+0* sizeof(RGBQUAD));
	data=pDIB+sizeof(BITMAPINFOHEADER)+256* sizeof(RGBQUAD);
		
	int i,j,offset;

	for(i=0;i<RGbminfoHeader->biHeight;i++)
	 {
		offset=(RGbminfoHeader->biHeight-1-i)*RGbminfoHeader->biWidth;
		
		for(j=0;j<RGbminfoHeader->biWidth;j++)
		{
		  data[offset+j]=datarg[offset+j].r;
		  
		}//j circle
	}//i circle
	 
	  	
#ifdef _MAC
	// First swap the size field
	*((LPDWORD)pDIB) = SWAPLONG(*((LPDWORD)pDIB));
	
	// Now swap the rest of the structure
	ByteSwapInfo(pDIB, IS_WIN30_DIB(pDIB));
	
#endif
	
	::GlobalUnlock((HGLOBAL) hDIBRedGreen);
	::GlobalUnlock((HGLOBAL) hDIB);
	
	return hDIB;
}

void WINAPI MvImageREDGREEN(HDIB hDIBRed,HDIB hDIBRedGreen,int i0,int j0)
{
	
	LPBITMAPINFOHEADER RbminfoHeader,RGbminfoHeader;
	
	LPSTR pDIBR,pDIBRG,datar;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -