raw简单插值算法
2015-10-30 18:52
627 查看
函数定义
struct RGBinfo{ BYTE B; BYTE G; BYTE R; };
RGBinfo** bmpbuffer是一个静态二维数组或者动态分配内存的二维数组
void CbmpView::RawInterpolation(RGBinfo** bmpbuffer,unsigned short** rawbuffer, UINT InterpolationMode,UINT rawBit,UINT rawWidth,UINT rawHeight) { switch (InterpolationMode) { case RG: for (UINT i = 0; i< rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { if (i % 2 == 0 && j % 2 == 0) { bmpbuffer[i][j].R = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].B = 0; bmpbuffer[i][j].G = 0; } else if (i % 2 == 1 && j % 2 == 1) { bmpbuffer[i][j].B = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].R = 0; bmpbuffer[i][j].G = 0; } else { bmpbuffer[i][j].G = rawbuffer[i][j] >> (rawBit-8); bmpbuffer[i][j].R = 0; bmpbuffer[i][j].B = 0; } } } for (UINT i = 0; i < rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { bmpbuffer[0][0].G = (bmpbuffer[0][1].G+bmpbuffer[1][0].G)/2;//R the frist pixel bmpbuffer[0][0].B = bmpbuffer[1][1].B;//R bmpbuffer[0][rawWidth - 1].R = bmpbuffer[0][rawWidth - 2].R;//the last pixel of frist line G bmpbuffer[0][rawWidth - 1].B = bmpbuffer[1][rawWidth - 1].B; bmpbuffer[rawHeight - 1][0].B = bmpbuffer[rawHeight - 1][1].B;//G bmpbuffer[rawHeight - 1][0].R = bmpbuffer[rawHeight - 2][0].R; bmpbuffer[rawHeight - 1][rawWidth - 1].R = bmpbuffer[rawHeight - 2][rawWidth - 2].R;//B bmpbuffer[rawHeight - 1][rawWidth - 1].G = (bmpbuffer[rawHeight - 1][rawWidth - 2].G+bmpbuffer[rawHeight-2][rawWidth-1].G)/2; if (i == 0 && j != 0 && j != rawWidth - 1)//the frist line RGRGRGRGRG { // GBGBGBGBGB if (j % 2 == 1)//G { bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; bmpbuffer[i][j].B = bmpbuffer[i + 1][j].B; } else//R { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G+bmpbuffer[i+1][j].G) / 3; bmpbuffer[i][j].B = (bmpbuffer[i + 1][j-1].B+bmpbuffer[i+1][j+1].B)/2; } } if (i == rawHeight - 1 && j != 0 && j != rawWidth - 1)//the last line { if (j % 2 == 1)//B { bmpbuffer[i][j].R = (bmpbuffer[i-1][j-1].R + bmpbuffer[i-1][j+1].R) / 2; bmpbuffer[i][j].G = (bmpbuffer[i-1][j].G+bmpbuffer[i][j-1].G+bmpbuffer[i][j+1].G) / 3; } else//G { bmpbuffer[i][j].B = (bmpbuffer[i][j-1].B+bmpbuffer[i][j+1].B) / 2; bmpbuffer[i][j].R = bmpbuffer[i - 1][j].R; } } if (j == 0 && i != 0 && i != rawHeight - 1)//the frist row RGRG { // GBGB if (i % 2 == 1)//G RGRG { // GBGB bmpbuffer[i][j].B = bmpbuffer[i][j + 1].B; bmpbuffer[i][j].R = (bmpbuffer[i-1][j].R+bmpbuffer[i+1][j].R) / 2; } else//R { bmpbuffer[i][j].G = (bmpbuffer[i][j + 1].G+bmpbuffer[i-1][j].G+bmpbuffer[i+1][j].G)/3; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j+1].B + bmpbuffer[i + 1][j+1].B) / 2; } } if (j == rawWidth - 1 && i != 0 && i != rawHeight - 1)//the last row { if (i % 2 == 1)//B { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G+bmpbuffer[i-1][j].G+bmpbuffer[i+1][j].G)/3; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j-1].R + bmpbuffer[i + 1][j-1].R) / 2; } else//G { bmpbuffer[i][j].R = bmpbuffer[i][j-1].R; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; } } if (i > 0 && i < rawHeight - 1 && j>0 && j < rawWidth - 1)//RGRGRG { //GBGBGB if (i % 2 == 0 && j % 2 == 1)//G //RGRGRG { //GBGBGB bmpbuffer[i][j].R = (bmpbuffer[i][j-1].R+bmpbuffer[i][j+1].R)/2; bmpbuffer[i][j].B = (bmpbuffer[i-1][j].B+bmpbuffer[i+1][j].B)/2; } else if (i % 2 == 1 && j % 2 == 0)//G { bmpbuffer[i][j].R = (bmpbuffer[i-1][j].R+bmpbuffer[i+1][j].R)/2; bmpbuffer[i][j].B = (bmpbuffer[i][j-1].B+bmpbuffer[i][j+1].B)/2; } else if (i % 2 == 1 && j % 2 == 1)//B { bmpbuffer[i][j].R = (bmpbuffer[i-1][j-1].R+bmpbuffer[i-1][j+1].R+bmpbuffer[i+1][j-1].R+bmpbuffer[i+1][j+1].R)/4; bmpbuffer[i][j].G = (bmpbuffer[i-1][j].G+bmpbuffer[i+1][j].G+bmpbuffer[i][j-1].G+bmpbuffer[i][j+1].G)/4; } else//R { bmpbuffer[i][j].G = (bmpbuffer[i-1][j].G + bmpbuffer[i+1][j].G+bmpbuffer[i][j-1].G+bmpbuffer[i][j+1].G) / 4; bmpbuffer[i][j].B = (bmpbuffer[i-1][j-1].B + bmpbuffer[i-1][j+1].B+bmpbuffer[i+1][j-1].B+bmpbuffer[i+1][j+1].B) / 4; } } } } break; case GR: for (UINT i = 0; i< rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { if (i % 2 == 0 && j % 2 == 1) { bmpbuffer[i][j].R = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].B = 0; bmpbuffer[i][j].G = 0; } else if (i % 2 == 1 && j % 2 == 0) { bmpbuffer[i][j].B = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].R = 0; bmpbuffer[i][j].G = 0; } else { bmpbuffer[i][j].G = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].B = 0; bmpbuffer[i][j].R = 0; } }//for(UINT j=0.....) }//for(UINT i=0.....) for (UINT i = 0; i < rawHeight;i++) { for (UINT j = 0; j < rawWidth; j++) { bmpbuffer[0][0].R = bmpbuffer[0][1].R; bmpbuffer[0][0].B = bmpbuffer[1][0].B; bmpbuffer[0][rawWidth - 1].G = (bmpbuffer[0][rawWidth - 2].G + bmpbuffer[1][rawWidth - 1].G) / 2; bmpbuffer[0][rawWidth - 1].B = bmpbuffer[1][rawWidth - 2].B; bmpbuffer[rawHeight - 1][0].G = (bmpbuffer[rawHeight - 2][0].G + bmpbuffer[rawHeight - 1][1].G) / 2; bmpbuffer[rawHeight - 1][0].R = bmpbuffer[rawHeight - 2][1].R; bmpbuffer[rawHeight - 1][rawWidth - 1].R = bmpbuffer[rawHeight - 2][rawWidth - 1].R; bmpbuffer[rawHeight - 1][rawWidth - 1].B = bmpbuffer[rawHeight - 1][rawWidth - 2].B; if (i == 0 && j != 0 && j != rawWidth - 1)//the frist line { if (j % 2 == 1)//R { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].B = (bmpbuffer[i + 1][j - 1].B + bmpbuffer[i + 1][j + 1].B) / 2; } else//G { bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; bmpbuffer[i][j].B = bmpbuffer[i + 1][j].B; } } if (i == rawHeight - 1 && j != 0 && j != rawWidth - 1)//the last line { if (j % 2 == 1)//G { bmpbuffer[i][j].R = bmpbuffer[i - 1][j].R; bmpbuffer[i][j].B = (bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 2; } else//B { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i - 1][j].G + bmpbuffer[i][j + 1].G) / 3; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j - 1].R + bmpbuffer[i - 1][j + 1].R) / 2; } } if (j == 0 && i != 0 && i != rawHeight - 1)//the frist row { if (i % 2 == 1)//B { bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j + 1].G) / 3; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j + 1].R + bmpbuffer[i + 1][j + 1].R) / 2; } else//G { bmpbuffer[i][j].R = bmpbuffer[i][j + 1].R; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; } } if (j == rawWidth - 1 && i != 0 && i != rawHeight - 1)//the last row { if (i % 2 == 1)//G { bmpbuffer[i][j].B = bmpbuffer[i][j - 1].B; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j].R + bmpbuffer[i + 1][j].R) / 2; } else//R { bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j - 1].B + bmpbuffer[i + 1][j - 1].B) / 2; } } if (i > 0 && i < rawHeight - 1 && j>0 && j < rawWidth - 1) { if (i % 2 == 0 && j % 2 == 1)//R { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j - 1].B + bmpbuffer[i - 1][j + 1].B + bmpbuffer[i + 1][j - 1].B + bmpbuffer[i + 1][j + 1].B) / 4; bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G) / 4; } else if (i % 2 == 1 && j % 2 == 0)//B { bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G) / 4; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j - 1].R + bmpbuffer[i - 1][j + 1].R + bmpbuffer[i + 1][j - 1].R + bmpbuffer[i + 1][j + 1].R) / 4; } else if (i%2==1&&j%2==1) { bmpbuffer[i][j].R = (bmpbuffer[i - 1][j].R + bmpbuffer[i + 1][j].R) / 2; bmpbuffer[i][j].B = (bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 2; } else { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; } } } } break; case BG: for (UINT i = 0; i< rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { if (i % 2 == 0 && j % 2 == 0) { bmpbuffer[i][j].B = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].R = 0; bmpbuffer[i][j].G = 0; } else if (i % 2 == 1 && j % 2 == 1) { bmpbuffer[i][j].R = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].B = 0; bmpbuffer[i][j].G = 0; } else { bmpbuffer[i][j].G = rawbuffer[i][j] >> (rawBit - 8); bmpbuffer[i][j].R = 0; bmpbuffer[i][j].B = 0; } } } /* BGBGBGBG GRGRGRGR BGBGBGBG GRGRGRGR */ for (UINT i = 0; i < rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { bmpbuffer[0][0].G = (bmpbuffer[0][1].G + bmpbuffer[1][0].G) / 2;//B the frist pixel bmpbuffer[0][0].R = bmpbuffer[1][1].R; bmpbuffer[0][rawWidth - 1].B = bmpbuffer[0][rawWidth - 2].B;//the last pixel of frist line G bmpbuffer[0][rawWidth - 1].R = bmpbuffer[1][rawWidth - 1].R; bmpbuffer[rawHeight - 1][0].R = bmpbuffer[rawHeight - 1][1].R;//G bmpbuffer[rawHeight - 1][0].B = bmpbuffer[rawHeight - 2][0].B; bmpbuffer[rawHeight - 1][rawWidth - 1].B = bmpbuffer[rawHeight - 2][rawWidth - 2].B; bmpbuffer[rawHeight - 1][rawWidth - 1].G = (bmpbuffer[rawHeight - 1][rawWidth - 2].G + bmpbuffer[rawHeight - 2][rawWidth - 1].G) / 2; if (i == 0 && j != 0 && j != rawWidth - 1)//the frist line { if (j % 2 == 1)//G { bmpbuffer[i][j].B = (bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 2; bmpbuffer[i][j].R = bmpbuffer[i + 1][j].R; } else//B { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].R = (bmpbuffer[i + 1][j - 1].R + bmpbuffer[i + 1][j + 1].R) / 2; } } if (i == rawHeight - 1 && j != 0 && j != rawWidth - 1)//the last line { if (j % 2 == 1)//R { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j - 1].B + bmpbuffer[i - 1][j + 1].B) / 2; bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G) / 3; } else//G { bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; bmpbuffer[i][j].B = bmpbuffer[i - 1][j].B; } } if (j == 0 && i != 0 && i != rawHeight - 1)//the frist row BGBG { // GRGR if (i % 2 == 1)//G BGBG { // GRGR bmpbuffer[i][j].R = bmpbuffer[i][j + 1].R; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; } else//B { bmpbuffer[i][j].G = (bmpbuffer[i][j + 1].G + bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j + 1].R + bmpbuffer[i + 1][j + 1].R) / 2; } } if (j == rawWidth - 1 && i != 0 && i != rawHeight - 1)//the last row { if (i % 2 == 1)//R { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j - 1].B + bmpbuffer[i + 1][j - 1].B) / 2; } else//G { bmpbuffer[i][j].B = bmpbuffer[i][j - 1].B; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j].R + bmpbuffer[i + 1][j].R) / 2; } } if (i > 0 && i < rawHeight - 1 && j>0 && j < rawWidth - 1)//BGBGBGBG { //GRGRGRGR if (i % 2 == 0 && j % 2 == 1)//G //BGBGBGBG { //GRGRGRGR bmpbuffer[i][j].B = (bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 2; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j].R + bmpbuffer[i + 1][j].R) / 2; } else if (i % 2 == 1 && j % 2 == 0)//G { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; } else if (i % 2 == 1 && j % 2 == 1)//R { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j - 1].B + bmpbuffer[i - 1][j + 1].B + bmpbuffer[i + 1][j - 1].B + bmpbuffer[i + 1][j + 1].B) / 4; bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G) / 4; } else//B { bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G) / 4; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j - 1].R + bmpbuffer[i - 1][j + 1].R + bmpbuffer[i + 1][j - 1].R + bmpbuffer[i + 1][j + 1].R) / 4; } } } } break; case GB: for (UINT i = 0; i< rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { if (i % 2 == 0 && j % 2 == 1) { bmpbuffer[i][j].B = rawbuffer[i][j] >> (rawBit - 8); } else if (i % 2 == 1 && j % 2 == 0) { bmpbuffer[i][j].R = rawbuffer[i][j] >> (rawBit - 8); } else { bmpbuffer[i][j].G = rawbuffer[i][j] >> (rawBit - 8); } } } /* GBGBGBGB RGRGRGRG GBGBGBGB RGRGRGRG */ for (UINT i = 0; i < rawHeight; i++) { for (UINT j = 0; j < rawWidth; j++) { bmpbuffer[0][0].B = bmpbuffer[0][1].B; bmpbuffer[0][0].R = bmpbuffer[1][0].R; bmpbuffer[0][rawWidth - 1].G = (bmpbuffer[0][rawWidth - 2].G + bmpbuffer[1][rawWidth - 1].G) / 2; bmpbuffer[0][rawWidth - 1].R = bmpbuffer[1][rawWidth - 2].R; bmpbuffer[rawHeight - 1][0].G = (bmpbuffer[rawHeight - 2][0].G + bmpbuffer[rawHeight - 1][1].G) / 2; bmpbuffer[rawHeight - 1][0].B = bmpbuffer[rawHeight - 2][1].B; bmpbuffer[rawHeight - 1][rawWidth - 1].B = bmpbuffer[rawHeight - 2][rawWidth - 1].B; bmpbuffer[rawHeight - 1][rawWidth - 1].R = bmpbuffer[rawHeight - 1][rawWidth - 2].R; if (i == 0 && j != 0 && j != rawWidth - 1)//the frist line { if (j % 2 == 1)//B { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].R = (bmpbuffer[i + 1][j - 1].R + bmpbuffer[i + 1][j + 1].R) / 2; } else//G { bmpbuffer[i][j].B = (bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 2; bmpbuffer[i][j].R = bmpbuffer[i + 1][j].R; } } if (i == rawHeight - 1 && j != 0 && j != rawWidth - 1)//the last line { if (j % 2 == 1)//G { bmpbuffer[i][j].B = bmpbuffer[i - 1][j].B; bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; } else//R { bmpbuffer[i][j].G = (bmpbuffer[i][j - 1].G + bmpbuffer[i - 1][j].G + bmpbuffer[i][j + 1].G) / 3; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j - 1].B + bmpbuffer[i - 1][j + 1].B) / 2; } } if (j == 0 && i != 0 && i != rawHeight - 1)//the frist row { if (i % 2 == 1)//R { bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j + 1].G) / 3; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j + 1].B + bmpbuffer[i + 1][j + 1].B) / 2; } else//G { bmpbuffer[i][j].B = bmpbuffer[i][j + 1].B; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j].R + bmpbuffer[i + 1][j].R) / 2; } } if (j == rawWidth - 1 && i != 0 && i != rawHeight - 1)//the last row { if (i % 2 == 1)//G { bmpbuffer[i][j].R = bmpbuffer[i][j - 1].R; bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; } else//B { bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i + 1][j].G) / 3; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j - 1].R + bmpbuffer[i + 1][j - 1].R) / 2; } } /* GBGBGBGB RGRGRGRG GBGBGBGB RGRGRGRG */ if (i > 0 && i < rawHeight - 1 && j>0 && j < rawWidth - 1) { if (i % 2 == 0 && j % 2 == 1)//B { bmpbuffer[i][j].R = (bmpbuffer[i - 1][j - 1].R + bmpbuffer[i - 1][j + 1].R + bmpbuffer[i + 1][j - 1].R + bmpbuffer[i + 1][j + 1].R) / 4; bmpbuffer[i][j].G = (bmpbuffer[i - 1][j].G + bmpbuffer[i + 1][j].G + bmpbuffer[i][j - 1].G + bmpbuffer[i][j + 1].G) / 4; } else if (i % 2 == 1 && j % 2 == 0)//R { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B + bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 4; bmpbuffer[i][j].R = (bmpbuffer[i - 1][j - 1].R + bmpbuffer[i - 1][j + 1].R + bmpbuffer[i + 1][j - 1].R + bmpbuffer[i + 1][j + 1].R) / 4; } else if (i % 2 == 1 && j % 2 == 1) { bmpbuffer[i][j].B = (bmpbuffer[i - 1][j].B + bmpbuffer[i + 1][j].B) / 2; bmpbuffer[i][j].R = (bmpbuffer[i][j - 1].R + bmpbuffer[i][j + 1].R) / 2; } else { bmpbuffer[i][j].R = (bmpbuffer[i - 1][j].R + bmpbuffer[i + 1][j].R) / 2; bmpbuffer[i][j].B = (bmpbuffer[i][j - 1].B + bmpbuffer[i][j + 1].B) / 2; } } } } break; } }
相关文章推荐
- 插值算法 反距离加权法IDW
- 样条插值(Spline)
- HEVC插值滤波器
- Matlab中插值函数汇总和使用说明
- matlab插值
- 插值方法
- 图像处理常用插值方法总结
- Matlab插值计算各时刻磁法勘探日变观测值
- RGB Bayer Color分析
- 多普勒失真信号重采样的Matlab仿真分析
- C#版本拉格朗日插值算法 — 用于MsChart 绘图控件进行插值算法绘图。
- <工程数学>Alglib库,测试插值运算
- 水平和竖直方向图像拉升
- 插值分类简要说明
- ArcGIS教程:反距离权重法的工作原理
- ArcGIS教程:趋势面法的工作原理
- ArcGIS教程:插值方法简介
- ArcGIS教程:什么是区域插值?
- 什么是区域插值?
- Vuejs学习系列(十七)--模板语法(三)