RAW数据格式的图片转换--常用于相机开发和图片旋转

来源:互联网 发布:log4j打印sql语句 编辑:程序博客网 时间:2024/05/22 10:54

近日,开发多款相机,在作视频流处理时,常用的流数据转换方法有以下几个函数。以作共享,欢迎讨论。

 

 

 

 

#define GFP_OPERATORIMAGEDATA_TYPE_INVERSE1// 反像图像数据#define GFP_OPERATORIMAGEDATA_TYPE_HMIRROR2// 水平镜像图像数据#define GFP_OPERATORIMAGEDATA_TYPE_VMIRROR3// 垂直镜像图像数据#define GFP_OPERATORIMAGEDATA_TYPE_RU90IRROR4// 顺时针90度#define GFP_OPERATORIMAGEDATA_TYPE_LD90IRROR5// 逆时针90度int MyVideo_OperatorImageDataEx(UCHAR* pImageData, int nw, int nh, int nBitCnt, UCHAR fOprType){if(nBitCnt != 24)return 0;UCHAR *pTmpData,  *pRowData, nSwap[3];int col, row, nMid, nrowLen, nOff;//if(nBitCnt == 8)//nrowLen = nw;//elsenrowLen = 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, pImageData +i * nLineLen + j* 3, 3 );}}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;}


 

原创粉丝点击