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

📄 图像镜像.txt

📁 19Kinds_image_arithmath 19种图像基本算法
💻 TXT
字号:
////////////////////////////////////////////////////////////////
//函数参数:
//hWnd是窗口句柄 
//Xdirection 是镜像方向
//函数说明:该函数根据输入的方向参数实现窗口图像的镜像处理
BOOL Mirror(HWND hWnd,BOOL XDirection)
{	
	//偏移和内存大小
	DWORD              OffBits,BufSize;
	//文件信息头指针
	LPBITMAPINFOHEADER lpImgData;
	//数据去指针
	LPSTR              lpPtr;
	//局部指针
	HLOCAL             hTempImgData;
	//暂存作用的文件信息头指针
	LPBITMAPINFOHEADER lpTempImgData;
	//暂存用的数据区指针
	LPSTR              lpTempPtr;
	//定义DC
	HDC                hDc;
	//文件句柄
	HFILE              hf;
	//计算象素的数据区位置时用
	LONG               x0,y0,x1,y1;
	//得到数据到文件头的偏移
	OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
	//得到源文件所需的内存大小
	BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);
	//内存检查
	if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
	{
		MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|MB_ICONEXCLAMATION);
		return FALSE;
	}
	//锁定数据区
	lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);    
	lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
	//指向数据区
	lpPtr=(char *)lpImgData;
	lpTempPtr=(char *)lpTempImgData;
	//初始化内存
	memset(lpTempPtr,(BYTE)255,BufSize);
	memcpy(lpTempPtr,lpPtr,OffBits);
	//横向镜像
	if( XDirection){
		for(y1=0;y1<bi.biHeight;y1++)
			for(x1=0;x1<bi.biWidth;x1++){
				//得到当前点的y中轴线对称点坐标
				x0=bi.biWidth-1-x1;
				y0=y1;
				//得到源数据区位置
				lpPtr=(char *)lpImgData+(BufSize-LineBytes-y0*LineBytes)+x0;
				//得到目标区位置
				lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y1*LineBytes)+x1;
				//赋值
				*lpTempPtr=*lpPtr;
			}
	}
	//纵向镜像
	else{
		//扫描整个图像
		for(y1=0;y1<bi.biHeight;y1++)
			for(x1=0;x1<bi.biWidth;x1++){
				//得到当前点的x中轴线的对称点坐标
				x0=x1;
				y0=bi.biHeight-1-y1;
				//得到源数据区位置
				lpPtr=(char *)lpImgData+(BufSize-LineBytes-y0*LineBytes)+x0;
				//得到新数据区位置
				lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y1*LineBytes)+x1;
				//赋值
				*lpTempPtr=*lpPtr;
			}
	}
	//得到窗口的DC
	hDc=GetDC(hWnd);
	if(hBitmap!=NULL)
		DeleteObject(hBitmap);
	//创建位图
	hBitmap=CreateDIBitmap(hDc,	(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT,
		(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD),
		(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);
	//创建并保存文件	
	if( XDirection)
		hf=_lcreat("c:\\mirrorx.bmp",0);
	else
		hf=_lcreat("c:\\mirrory.bmp",0);
	
	_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 
	_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
	_lclose(hf);
	//释放资源
	ReleaseDC(hWnd,hDc);
	LocalUnlock(hTempImgData);
	LocalFree(hTempImgData);
	GlobalUnlock(hImgData);
	return TRUE;
}

⌨️ 快捷键说明

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