8位、24位原图数据(RAW)反像、水平镜像、垂直镜像算法实现 .
2014-09-24 10:06
162 查看
#define GFP_OPERATORIMAGEDATA_TYPE_INVERSE 1 // 反像图像数据 #define GFP_OPERATORIMAGEDATA_TYPE_HMIRROR 2 // 水平镜像图像数据 #define GFP_OPERATORIMAGEDATA_TYPE_VMIRROR 3 // 垂直镜像图像数据 //24位 int OperatorImageDataEx(UCHAR* pImageData, int nw, int nh, int nBitCnt, UCHAR fOprType) { if(nBitCnt == 8) return Gfp_OperatorImageData(pImageData, nw, nh, fOprType); if(nBitCnt != 24) return 0; UCHAR *pTmpData, *pRowData, nSwap[3]; int col, row, nMid, nrowLen, nOff; // if(nBitCnt == 8) // nrowLen = nw; // else nrowLen = nw * 3; switch(fOprType) { case GFP_OPERATORIMAGEDATA_TYPE_INVERSE: pTmpData = pImageData; for(row = 0; row < nh; row++) { for(col = 0; col < nrowLen; col++, pTmpData++) { *pTmpData = ~(*pTmpData); } } return 1; case GFP_OPERATORIMAGEDATA_TYPE_HMIRROR: nMid = nw >> 1; pTmpData = pImageData; for(row = 0; row < nh; row++, pTmpData += nrowLen) { for(col = 0, nOff = 0; col < nMid; col++, nOff += 3) { memcpy(nSwap, pTmpData + nOff, 3); memcpy(pTmpData + nOff, pTmpData + (nw - 1 - col) * 3, 3); memcpy(pTmpData + (nw - 1 - col) * 3, nSwap, 3); } } return 1; case GFP_OPERATORIMAGEDATA_TYPE_VMIRROR: nMid = nh >> 1; pRowData = (UCHAR*)malloc(sizeof(UCHAR) * nrowLen); if(NULL == pRowData) return 0; pTmpData = pImageData; for(row = 0; row < nMid; row++, pTmpData += nrowLen) { memcpy(pRowData, pTmpData, nrowLen); memcpy(pTmpData, pImageData + (nh - 1 - row) * nrowLen, nrowLen); memcpy(pImageData + (nh - 1 - row) * nrowLen, pRowData, nrowLen); } free(pRowData); pRowData = NULL; return 1; case GFP_OPERATORIMAGEDATA_TYPE_RU90IRROR: { unsigned char* pData = (unsigned char*)malloc(3*nh*nw); memset(pData, 0, 3*nw*nh); int nLineLen = 3*nw; int nlineLen1 = 3*nh; //memcpy(pData, pImageData, 3*nh*nw); for(int i = 0; i < nh; i++) { for(int j = 0; j < nw; j++) { memcpy(pData + j* nlineLen1 + (nh - i - 1)* 3, /*j*nh + nh -1 -i ,*/ pImageData +i * nLineLen + j* 3, 3 ); //*(pData + j * nh + nh - 1 - i) = *(pImageData + i * nw + j); } } memcpy(pImageData, pData, 3*nh*nw); free(pData); pData = NULL; return 1; } case GFP_OPERATORIMAGEDATA_TYPE_LD90IRROR: { unsigned char* pData1 = (unsigned char*)malloc(3*nh*nw); memset(pData1, 0, 3*nw*nh); int nWLenth = 3*nw; int nHLenth = 3*nh; for( int i = 0; i < nh; i++ ) { for(int j =0; j < nw; j++ ) { //memcpy(pData1+(nh-1-j)*nWLenth + i*3, pImageData+i*nWLenth+j*3, 3); memcpy(pData1 + (nw-1-j)*nHLenth + i*3, pImageData + i*nWLenth + j*3, 3); } } memcpy(pImageData,pData1,3*nw*nh); free(pData1); pData1 = NULL; return 1; } } return 0; } //8位 int OperatorImageData(UCHAR* pImageData, int nw, int nh, UCHAR fOprType) { if(NULL == pImageData) return 0; UCHAR *pTmpData, *pRowData, nSwap; int col, row, nMid; switch(fOprType) { case GFP_OPERATORIMAGEDATA_TYPE_INVERSE: pTmpData = pImageData; for(row = 0; row < nh; row++) { for(col = 0; col < nw; col++, pTmpData++) { *pTmpData = ~(*pTmpData); } } return 1; case GFP_OPERATORIMAGEDATA_TYPE_HMIRROR: nMid = nw >> 1; pTmpData = pImageData; for(row = 0; row < nh; row++, pTmpData += nw) { for(col = 0; col < nMid; col++) { nSwap = pTmpData[col]; pTmpData[col] = pTmpData[nw - 1 - col]; pTmpData[nw - 1 - col] = nSwap; } } return 1; case GFP_OPERATORIMAGEDATA_TYPE_VMIRROR: nMid = nh >> 1; pRowData = (UCHAR*)malloc(sizeof(UCHAR) * nw); if(NULL == pRowData) return 0; pTmpData = pImageData; for(row = 0; row < nMid; row++, pTmpData += nw) { memcpy(pRowData, pTmpData, nw); memcpy(pTmpData, pImageData + (nh - 1 - row) * nw, nw); memcpy(pImageData + (nh - 1 - row) * nw, pRowData, nw); } free(pRowData); return 1; } return 0; }
相关文章推荐
- 基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分。 http://www.makersoft.org
- 1.读写分离(主数据库写 可分拆副数据库读);2.垂直分库(将系统按业务进行了垂直拆分主数据库);3.水平分主库(ID生成算法决定了如何拆分数据,以及增删改查)
- 用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码
- 数据结构——快速排序原理及算法Java实现
- 数据结构与算法(C#实现)系列---二叉树
- CSS实现水平/垂直自适应浏览器居中
- 数据结构中关键路径算法的实现与应用
- CSS实现水平/垂直自适应浏览器居中【转】
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- CSS:实现某个div在网页中垂直水平居中
- 在J2ME中实现图片的翻转效果(包括垂直和水平)
- 海量数据库的查询优化及分页算法方案(二)-实现小数据量和海量数据的通用分页显示存储过程 [转]
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- DIV的水平、垂直居中的最佳实现
- 在J2ME中实现图片的反转效果(包括垂直和水平)
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- CSS实现未知内容高度的垂直水平居中(改良版)
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- css实现图片在div中水平和垂直居中(但图片宽高要小于div宽高)