在vc中实现DIB图像镜像转换的两个方法
来源:互联网 发布:网络借贷不还会怎么样 编辑:程序博客网 时间:2024/06/05 22:34
具体的代码如下:
//镜像处理
BOOL ImageMirror(LPSTR lpDIBBits,LONG lWidth,LONG lHeight,BOOL V_H)
{
//方法一
LPSTR lpSrc;//指向原位图的指针
LPSTR lpDupArea;//指向要复制区域的指针
LPSTR lpDupDib;//指向复制图像的指针
LONG lLineBytes=WIDTHBYTES(lWidth*8);
HLOCAL hBits=LocalAlloc(LHND,lLineBytes);//暂时分配内存,以保存一行图像
if (hBits==NULL) {
return FALSE;
}
lpDupDib=(LPSTR)LocalLock(hBits);//锁定内存
LONG i,j;
if (V_H) {//水平镜像
for(i=0;i<lHeight;i++)
{
for(j=0;j<lWidth/2;j++)
{
lpSrc=(LPSTR)lpDIBBits+lLineBytes*i+j;// 指向倒数第i行,第j个象素的指针
lpDupArea=(LPSTR)lpDIBBits+lLineBytes*(i+1)-j;// 指向倒数第i行,倒数第j个象素的指针
*lpDupDib=*lpDupArea;
*lpDupArea=*lpSrc;
*lpSrc=*lpDupDib;
}
}
}
else{//垂直镜像
for(i=0;i<lHeight/2;i++){
lpSrc=(LPSTR)lpDIBBits+lLineBytes*i;// 指向倒数第i行
lpDupArea=(LPSTR)lpDIBBits+lLineBytes*(lHeight-1-i);// 指向第i行
memcpy(lpDupDib,lpDupArea,lLineBytes);
memcpy(lpDupArea,lpSrc,lLineBytes);
memcpy(lpSrc,lpDupDib,lLineBytes);
}
}
::LocalUnlock(hBits);
LocalFree(hBits);
//方法二
LPSTR lpDstStartBits;//指向复制图像的起始像素
LPSTR lpDstDibBits;//指向复制图像的指针
LPSTR lpSrcDibBits;//指向源图像的指针
long lLineBytes=WIDTHBYTES(lWidth*8);//每行的字节数
HLOCAL hDstDibBits=LocalAlloc(LHND,lHeight*lLineBytes);//暂时分配内存
lpDstStartBits=(LPSTR)LocalLock(hDstDibBits);//锁定内存
//临时指针,指向变换后的数据
if (hDstDibBits==NULL){
return false;
}
for(int i=0 ;i<lHeight;i++)
{
for(int j=0;j<lWidth;j++)
{
//指向临时dib中的第i行,第j列像素的指针
lpDstDibBits=(LPSTR)lpDstStartBits+lLineBytes*(lHeight-1-i)+j ;
if(V_H==FALSE)//垂直镜像
{
lpSrcDibBits=(LPSTR)lpDIBBits+lLineBytes*i+j;//指向倒数第i行,第j列
}
else if(V_H==TRUE)//水平镜像
{
lpSrcDibBits=(LPSTR)lpDIBBits+lLineBytes*(lHeight-1-i)+lWidth-1-j;
}
*lpDstDibBits=*lpSrcDibBits;//复制像素
}
}
memcpy(lpDIBBits,lpDstStartBits,lLineBytes*lHeight);
LocalUnlock(hDstDibBits);
LocalFree(hDstDibBits);
return TRUE;
}
- 在vc中实现DIB图像镜像转换的两个方法
- VC++图像处理中DIB类库的用法,外部接口函数怎样使用啊?
- VC中实现多格式图像的灵活转换
- 【VC++】在MFC中显示IplImage图像的方法
- 图像的配准及在VC++中实现
- 图像的配准及在VC++中实现
- 图像的配准及在VC++中实现
- 图像的配准及在VC++中实现
- VC实现多格式图像的转换
- VC实现多格式图像的转换
- VC中实现多格式图像的灵活转换与字符串之间转换
- 在 VC++ 6.0 中使用 ATL 实现对 COM 对像的事件处理
- 在VC的两个对话框类中传递参数的三种方法
- 4.3【图像镜像】-------------基于Opencv实现-----图像的镜像变换
- VC中DDB与DIB位图编程
- VC中DDB与DIB位图编程
- 【VC图像处理】 图像水平镜像,垂直镜像,图像转置
- 在VC++中如何将BSTR转换成LPCTSTR的几种方法.
- 传智播客Hibernate视频教程学习笔记41
- JS调试技巧汇总(待补充)
- CStatus类更新状态条上的现实内容 访问冲突 问题
- 一个SqlDataReader的用法,dr.IsDBNull(2)用来判断第几列是否为null
- How to install live555 in the MSYS?
- 在vc中实现DIB图像镜像转换的两个方法
- J2EE 加载Spring的applicationContext.xml文件的两种方式
- 无线上网常见的十二大故障解决方法
- iframe 的onload事伯
- iPhone开发step by step
- ActiveX 控件测试容器 (tstcon32.exe)
- Microsoft JET Database Engine 错误80004005 未指定的错误
- XML学习网址
- SqlDataReade.GetOrdinal() 方法