#include<iostream>typedefunsignedchar BYTE;// bayer raw格式enumE_BayerRawFormat{FORMAT_GRBG =0,FORMAT_BGGR,FORMAT_RGGB,FORMAT_GBRG,FORMAT_NULL,};// 图像结构体structST_ImageInfo{int width;// 图像宽int height;// 图像高unsignedchar*buffer;// 图像buffer};////// \brief RAWToRGB24_BGGR/RAWToRGB24_RGGB/RAWToRGB24_GRBG/RAWToRGB24_GBRG:bayerraw 转bmp,线性插值算法实现转换/// \param src:raw图buffer/// \param dst:bmp buffer/// \param w:raw宽/// \param h:raw高/// \param bit:raw bits,一般是8或10或12或16///voidRAWToRGB24_BGGR(unsignedshort* src,BYTE* dst,int w,int h,int bit){// B Gb B Gb B Gb B Gb// Gr R Gr R Gr R Gr R// B Gb B Gb B Gb B Gb// Gr R Gr R Gr R Gr Rint iBits = bit-8;int iGrPos =0;int iGbPos =0;int iRPos =0;int iBPos =0;//中心部分for(int y =1;y<(h-1);y+=2){for(int x =1;x<(w-1);x+=2){iRPos = y*w+x;iGrPos = y*w+x+1;iGbPos =(y+1)*w+x;iBPos =(y+1)*w+x+1;//Rdst[iRPos*3]=(BYTE)((src[iRPos-1-w]+ src[iRPos-1+w]+ src[iRPos+1-w]+ src[iRPos+1+w])/4>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/4>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)((src[iGbPos]+ src[iGbPos+1-w])/2>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGbPos-w]+ src[iGbPos+w])/2>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos-w]+ src[iBPos+w])/4>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-1-w]+ src[iBPos-1+w]+ src[iBPos+1-w]+ src[iBPos+1+w])/4>>iBits);}}//上下for(int x=1;x<(w-1);x+=2){iGbPos = x;iBPos = x+1;iRPos =(h-1)*w +x;iGrPos =(h-1)*w +x+1;//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGbPos]>>iBits);dst[iGbPos*3+2]=(BYTE)(src[iGbPos+w]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos+w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos+w-1]+ src[iBPos+w+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-w-1]+ src[iRPos-w+1])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos-w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);//Grdst[iGrPos*3]=(BYTE)(src[iGrPos-w]>>iBits);dst[iGrPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);}//左右for(int y =1; y<(h-1); y+=2){iGrPos = y*w;iBPos =(y+1)*w;iRPos =(y+1)*w-1;iGbPos =(y+2)*w-1;//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGrPos*3+2]=(BYTE)(src[iGrPos+1]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos+1]+ src[iBPos-w]+ src[iBPos+w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos+1-w]+ src[iBPos+1+w])/2>>iBits);//Gbdst[iGbPos*3]=(BYTE)(src[iGbPos-1]>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-1-w]+ src[iRPos-1+w])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos-w]+ src[iRPos+w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}//左上角dst[0]=(BYTE)(src[0]>>iBits);dst[1]=(BYTE)((src[1]+src[w])/2>>iBits);dst[2]=(BYTE)(src[w+1]>>iBits);//右上角dst[(w-1)*3]=(BYTE)(src[w-1-1]>>iBits);dst[(w-1)*3+1]=(BYTE)(src[w-1]>>iBits);dst[(w-1)*3+2]=(BYTE)(src[w-1+w]>>iBits);//左下角dst[(h-1)*w*3]=(BYTE)(src[(h-1)*w-w]>>iBits);dst[(h-1)*w*3+1]=(BYTE)((src[(h-1)*w]+ src[(h-1)*w+1-w])/2>>iBits);dst[(h-1)*w*3+2]=(BYTE)(src[(h-1)*w+1]>>iBits);//右下角dst[(h*w-1)*3]=(BYTE)(src[(h*w-1)-1-w]>>iBits);dst[(h*w-1)*3+1]=(BYTE)((src[(h*w-1)-1]+ src[(h*w-1)-w])/2>>iBits);dst[(h*w-1)*3+2]=(BYTE)(src[h*w-1]>>iBits);}voidRAWToRGB24_RGGB(unsignedshort* src,BYTE* dst,int w,int h,int bit){// /*// * R Gr R Gr R Gr R Gr R Gr// * Gb B Gb B Gb B Gb B Gb B// * R Gr R Gr R Gr R Gr R Gr// * Gb B Gb B Gb B Gb B Gb B// */int iBits = bit-8;int iGrPos =0;int iGbPos =0;int iRPos =0;int iBPos =0;//中心部分for(int y =1;y<(h-1);y+=2){for(int x =1;x<(w-1);x+=2){iBPos = y*w+x;iGbPos = y*w+x+1;iGrPos =(y+1)*w+x;iRPos =(y+1)*w+x+1;//B BGRdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos-w]+ src[iBPos+w])/4>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-1-w]+ src[iBPos-1+w]+ src[iBPos+1-w]+ src[iBPos+1+w])/4>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)((src[iGbPos]+ src[iGbPos+1-w])/2>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGbPos-w]+ src[iGbPos+w])/2>>iBits);//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-1-w]+ src[iRPos-1+w]+ src[iRPos+1-w]+ src[iRPos+1+w])/4>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/4>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}}//上下for(int x=1;x<(w-1);x+=2){iGrPos = x;iRPos = x+1;iBPos =(h-1)*w +x;iGbPos =(h-1)*w +x+1;//Gr BGRdst[iGrPos*3]=(BYTE)(src[iGrPos+w]>>iBits);dst[iGrPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos+w-1]+ src[iRPos+w+1])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos+w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGbPos]>>iBits);dst[iGbPos*3+2]=(BYTE)(src[iGbPos-w]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos-w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-w-1]+ src[iBPos-w+1])/2>>iBits);}//左右for(int y =1; y<(h-1); y+=2){iGbPos = y*w;iRPos =(y+1)*w;iBPos =(y+1)*w-1;iGrPos =(y+2)*w-1;//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGrPos*3+2]=(BYTE)(src[iGrPos-1]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos-w]+ src[iBPos+w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-1-w]+ src[iBPos-1+w])/2>>iBits);//Gbdst[iGbPos*3]=(BYTE)(src[iGbPos+1]>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos+1-w]+ src[iRPos+1+w])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}//左上角dst[0]=(BYTE)(src[w+1]>>iBits);dst[1]=(BYTE)((src[1]+src[w])/2>>iBits);dst[2]=(BYTE)(src[0]>>iBits);//右上角dst[(w-1)*3]=(BYTE)(src[w-1+w]>>iBits);dst[(w-1)*3+1]=(BYTE)(src[w-1]>>iBits);dst[(w-1)*3+2]=(BYTE)(src[w-1-2]>>iBits);//左下角dst[(h-1)*w*3]=(BYTE)(src[(h-1)*w+1]>>iBits);dst[(h-1)*w*3+1]=(BYTE)((src[(h-1)*w]+ src[(h-1)*w+1-w])/2>>iBits);dst[(h-1)*w*3+2]=(BYTE)(src[(h-1)*w-w]>>iBits);//右下角dst[(h*w-1)*3]=(BYTE)(src[h*w-1]>>iBits);dst[(h*w-1)*3+1]=(BYTE)((src[(h*w-1)-1]+ src[(h*w-1)-w])/2>>iBits);dst[(h*w-1)*3+2]=(BYTE)(src[h*w-1-1-w]>>iBits);}voidRAWToRGB24_GRBG(unsignedshort* src,BYTE* dst,int w,int h,int bit){// /*// * Gr R Gr R Gr R Gr R// * B Gb B Gb B Gb B Gb// * Gr R Gr R Gr R Gr R// * B Gb B Gb B Gb B Gb// */int iBits = bit-8;int iGrPos =0;int iGbPos =0;int iRPos =0;int iBPos =0;//中心部分for(int y =1;y<(h-1);y+=2){for(int x =1;x<(w-1);x+=2){iGbPos = y*w+x;iBPos = y*w+x+1;iRPos =(y+1)*w+x;iGrPos =(y+1)*w+x+1;//B BGRdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos-w]+ src[iBPos+w])/4>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-1-w]+ src[iBPos-1+w]+ src[iBPos+1-w]+ src[iBPos+1+w])/4>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)((src[iGbPos]+ src[iGbPos+1-w])/2>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGbPos-w]+ src[iGbPos+w])/2>>iBits);//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-1-w]+ src[iRPos-1+w]+ src[iRPos+1-w]+ src[iRPos+1+w])/4>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/4>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}}//上下for(int x=1;x<(w-1);x+=2){iRPos = x;iGrPos = x+1;iGbPos =(h-1)*w +x;iBPos =(h-1)*w +x+1;//Gr BGRdst[iGrPos*3]=(BYTE)(src[iGrPos+w]>>iBits);dst[iGrPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos+w-1]+ src[iRPos+w+1])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos+w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGbPos]>>iBits);dst[iGbPos*3+2]=(BYTE)(src[iGbPos-w]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos-w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-w-1]+ src[iBPos-w+1])/2>>iBits);}//左右for(int y =1; y<(h-1); y+=2){iBPos = y*w;iGrPos =(y+1)*w;iGbPos =(y+1)*w-1;iRPos =(y+2)*w-1;//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGrPos*3+2]=(BYTE)(src[iGrPos+1]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos+1]+ src[iBPos-w]+ src[iBPos+w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos+1-w]+ src[iBPos+1+w])/2>>iBits);//Gbdst[iGbPos*3]=(BYTE)(src[iGbPos-1]>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-1-w]+ src[iRPos-1+w])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}//左上角dst[0]=(BYTE)(src[w]>>iBits);dst[1]=(BYTE)(src[0]>>iBits);dst[2]=(BYTE)(src[1]>>iBits);//右上角dst[(w-1)*3]=(BYTE)(src[2*w-2]>>iBits);dst[(w-1)*3+1]=(BYTE)((src[w-2]+ src[2*w-1])/2>>iBits);dst[(w-1)*3+2]=(BYTE)(src[w-1]>>iBits);//左下角dst[(h-1)*w*3]=(BYTE)(src[(h-1)*w]>>iBits);dst[(h-1)*w*3+1]=(BYTE)((src[(h-1)*w+1]+ src[(h-1)*w-w])/2>>iBits);dst[(h-1)*w*3+2]=(BYTE)(src[(h-1)*w-w+1]>>iBits);//右下角dst[(h*w-1)*3]=(BYTE)(src[h*w-1-1]>>iBits);dst[(h*w-1)*3+1]=(BYTE)(src[h*w-1]>>iBits);dst[(h*w-1)*3+2]=(BYTE)(src[h*w-1-w]>>iBits);}voidRAWToRGB24_GBRG(unsignedshort* src,BYTE* dst,int w,int h,int bit){// /*// * Gb B Gb B Gb B Gb B// * R Gr R Gr R Gr R Gr// * Gb B Gb B Gb B Gb B// * R Gr R Gr R Gr R Gr// */int iBits = bit-8;int iGrPos =0;int iGbPos =0;int iRPos =0;int iBPos =0;//中心部分for(int y =1;y<(h-1);y+=2){for(int x =1;x<(w-1);x+=2){iGrPos = y*w+x;iRPos = y*w+x+1;iBPos =(y+1)*w+x;iGbPos =(y+1)*w+x+1;//B BGRdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos-w]+ src[iBPos+w])/4>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-1-w]+ src[iBPos-1+w]+ src[iBPos+1-w]+ src[iBPos+1+w])/4>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)((src[iGbPos]+ src[iGbPos+1-w])/2>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGbPos-w]+ src[iGbPos+w])/2>>iBits);//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-1-w]+ src[iRPos-1+w]+ src[iRPos+1-w]+ src[iRPos+1+w])/4>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/4>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}}//上下for(int x=1;x<(w-1);x+=2){iBPos = x;iGbPos = x+1;iGrPos =(h-1)*w +x;iRPos =(h-1)*w +x+1;//Gr BGRdst[iGrPos*3]=(BYTE)(src[iGrPos-w]>>iBits);dst[iGrPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGrPos*3+2]=(BYTE)((src[iGrPos-1]+ src[iGrPos+1])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos-w-1]+ src[iRPos-w+1])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos-1]+ src[iRPos+1]+ src[iRPos-w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);//Gbdst[iGbPos*3]=(BYTE)((src[iGbPos-1]+ src[iGbPos+1])/2>>iBits);dst[iGbPos*3+1]=(BYTE)(src[iGbPos]>>iBits);dst[iGbPos*3+2]=(BYTE)(src[iGbPos+w]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos+1]+ src[iBPos+w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos+w-1]+ src[iBPos+w+1])/2>>iBits);}//左右for(int y =1; y<(h-1); y+=2){iRPos = y*w;iGbPos =(y+1)*w;iGrPos =(y+1)*w-1;iBPos =(y+2)*w-1;//Grdst[iGrPos*3]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);dst[iGrPos*3+1]=(BYTE)(src[iGrPos]>>iBits);dst[iGrPos*3+2]=(BYTE)(src[iGrPos-1]>>iBits);//Bdst[iBPos*3]=(BYTE)(src[iBPos]>>iBits);dst[iBPos*3+1]=(BYTE)((src[iBPos-1]+ src[iBPos-w]+ src[iBPos+w])/3>>iBits);dst[iBPos*3+2]=(BYTE)((src[iBPos-1-w]+ src[iBPos-1+w])/2>>iBits);//Gbdst[iGbPos*3]=(BYTE)(src[iGbPos+1]>>iBits);dst[iGbPos*3+1]=(BYTE)((src[iGrPos]+ src[iGrPos+1-w])/2>>iBits);dst[iGbPos*3+2]=(BYTE)((src[iGrPos-w]+ src[iGrPos+w])/2>>iBits);//Rdst[iRPos*3]=(BYTE)((src[iRPos+1-w]+ src[iRPos+1+w])/2>>iBits);dst[iRPos*3+1]=(BYTE)((src[iRPos+1]+ src[iRPos-w]+ src[iRPos+w])/3>>iBits);dst[iRPos*3+2]=(BYTE)(src[iRPos]>>iBits);}//左上角dst[0]=(BYTE)(src[1]>>iBits);dst[1]=(BYTE)(src[0]>>iBits);dst[2]=(BYTE)(src[w]>>iBits);//右上角dst[(w-1)*3]=(BYTE)(src[w-1]>>iBits);dst[(w-1)*3+1]=(BYTE)((src[w-2]+ src[2*w-1])/2>>iBits);dst[(w-1)*3+2]=(BYTE)(src[2*w-2]>>iBits);//左下角dst[(h-1)*w*3]=(BYTE)(src[(h-1)*w +1-w]>>iBits);dst[(h-1)*w*3+1]=(BYTE)((src[(h-1)*w+1]+ src[(h-1)*w-w])/2>>iBits);dst[(h-1)*w*3+2]=(BYTE)(src[(h-1)*w]>>iBits);//右下角dst[(h*w-1)*3]=(BYTE)(src[h*w-1-w]>>iBits);dst[(h*w-1)*3+1]=(BYTE)(src[h*w-1]>>iBits);dst[(h*w-1)*3+2]=(BYTE)(src[h*w-1-1]>>iBits);}////// \brief RAWToRGB24_Linear_Interpolation:raw转bmp,线性插值实现/// \param src:raw buffer/// \param dst:bmp buffer/// \param w:raw宽/// \param h:raw高/// \param format:raw bayer格式:FORMAT_BGGR、FORMAT_RGGB、FORMAT_GRBG、FORMAT_GBRG/// \param bit:raw bits,一般是8或10或12或16///voidRAWToRGB24_Linear_Interpolation(unsignedshort* src,BYTE* dst,int w,int h,BYTE format,int bit){if((nullptr== src)||(nullptr== dst))return;switch(format){case FORMAT_BGGR:RAWToRGB24_BGGR(src,dst,w,h,bit);break;case FORMAT_RGGB:RAWToRGB24_RGGB(src,dst,w,h,bit);break;case FORMAT_GRBG:RAWToRGB24_GRBG(src,dst,w,h,bit);break;case FORMAT_GBRG:RAWToRGB24_GBRG(src,dst,w,h,bit);break;case FORMAT_NULL:printf("No format.\n");break;}}////// \brief LinearImage:线性插值,raw bayer为RGGB/// \param src/// \param dst///voidLinearImage(ST_ImageInfo &src,ST_ImageInfo &dst){// * R G R G R G R G// * G B G B G B G B// * R G R G R G R G// * G B G B G B G B// * R G R G R G R G// * G B G B G B G Bint iDstWidth = dst.width;int iDstHeight = dst.height;unsignedchar* pusSrc =(unsignedchar*)(src.buffer);int width = src.width;int hight = src.height;for(int y =0;y<(iDstHeight);++y)//目标图像的高和宽{for(int x =0;x<(iDstWidth);++x){double dSrcX = x*(1.0*width/iDstWidth);int iSrcX =(int)dSrcX;double dSrcFractionalX = dSrcX - iSrcX;double dSrcY = y*(1.0*hight/iDstHeight);int iSrcY =(int)dSrcY;double dSrcFractionalY = dSrcY - iSrcY;dst.buffer[y*iDstWidth+x]=(1-dSrcFractionalX)*(1-dSrcFractionalY)*pusSrc[iSrcY*width + iSrcX]+(1-dSrcFractionalX)*dSrcFractionalY*pusSrc[(iSrcY+1)*width+iSrcX]+dSrcFractionalX*(1-dSrcFractionalY)*pusSrc[iSrcY*width+iSrcX+1]+dSrcFractionalX*dSrcFractionalY*pusSrc[(iSrcY+1)*width+iSrcX+1];}}}