前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pixel art之 hqx 算法

pixel art之 hqx 算法

作者头像
cpuimage
发布2018-04-12 15:49:50
1.4K0
发布2018-04-12 15:49:50
举报
文章被收录于专栏:算法+算法+

在去年的时候,偶然看到hqx算法。

一个高质量的插值放大算法。

与双线性插值等插值算法相比,这个算法放大后对人眼保护相对比较好。

没有双线性插值看起来模糊,固然,也抽空把算法简单优化了一下。

官网及代码:

https://web.archive.org/web/20131205091805/http://www.hiend3d.com/hq2x.html

https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/hqx/hqx-1.1.tar.gz

维基百科:

https://en.wikipedia.org/wiki/Hqx

不够这个算法写得贼恶心,并不适用于学习。

贴上维基百科上的demo效果对比图。

博主只是简单地把其中的放大两倍的算法,优化了一下,极大地提升算法的速度。

废话不多说,贴上代码:

代码语言:javascript
复制
/*
//(c1*3+c2) >> 2;
#define Interp1(c1, c2) Interpolate_2(c1, c2, 3, 1, 2);
//(c1*2+c2+c3) >> 2; 
#define Interp2(c1, c2, c3) Interpolate_3(c1, c2, c3, 2, 1, 1, 2);
//(c1*7+c2)/8;
#define Interp3(c1, c2) Interpolate_2(c1, c2, 7, 1, 3);
//(c1*2+(c2+c3)*7)/16;
#define Interp4(c1, c2, c3) Interpolate_3(c1, c2, c3, 2, 7, 7, 4);
//(c1+c2) >> 1;
#define Interp5(c1, c2) Interpolate_2(c1, c2, 1, 1, 1);
//(c1*5+c2*2+c3)/8;
#define Interp6(c1, c2, c3) Interpolate_3(c1, c2, c3, 5, 2, 1, 3);
//(c1*6+c2+c3)/8;
#define Interp7(c1, c2, c3) Interpolate_3(c1, c2, c3, 6, 1, 1, 3);
//(c1*5+c2*3)/8;
#define Interp8(c1, c2) Interpolate_2(c1, c2, 5, 3, 3);
//(c1*2+(c2+c3)*3)/8;
#define Interp9(c1, c2, c3) Interpolate_3(c1, c2, c3, 2, 3, 3, 3);
//(c1*14+c2+c3)/16;
#define Interp10(c1, c2, c3) Interpolate_3(c1, c2, c3, 14, 1, 1, 4);
*/

#define MASK_2     0x0000FF00
#define MASK_13    0x00FF00FF 
#define MASK_ALPHA 0xFF000000


#define    rgb_to_y( c)   ((19595 * RED((c)) + 38470 * GREEN((c)) + 7471 * BLUE((c))) >> 16)


/* Interpolate functions */
 unsigned int Interpolate_2(unsigned int &c1, unsigned int &c2, int w1, int w2, int shift)
{
    if (c1 == c2) {
        return c1;
    }
    return
        (((((c1 & MASK_ALPHA) >> 24) * w1 + ((c2 & MASK_ALPHA) >> 24) * w2) << (24 - shift)) & MASK_ALPHA) +
        ((((c1 & MASK_2) * w1 + (c2 & MASK_2) * w2) >> shift) & MASK_2) +
        ((((c1 & MASK_13) * w1 + (c2 & MASK_13) * w2) >> shift) & MASK_13);
}
 unsigned int Interpolate_3(unsigned int &c1, unsigned int &c2, unsigned int &c3, int w1, int w2, int w3, int shift)
{
    return
        (((((c1 & MASK_ALPHA) >> 24) * w1 + ((c2 & MASK_ALPHA) >> 24) * w2 + ((c3 & MASK_ALPHA) >> 24) * w3) << (24 - shift)) & MASK_ALPHA) +
        ((((c1 & MASK_2) * w1 + (c2 & MASK_2) * w2 + (c3 & MASK_2) * w3) >> shift) & MASK_2) +
        ((((c1 & MASK_13) * w1 + (c2 & MASK_13) * w2 + (c3 & MASK_13) * w3) >> shift) & MASK_13);
}


void   hq2x_32(unsigned int *input, unsigned int *output, int Width, int Height, int Stride)
{
    int Channels = Stride / Width;
    if (Channels != 4) return;  
    unsigned int pixel[10]; 
    unsigned int gray[10]; 
    int step = 2;
    unsigned int dstStride = (Width * step)*Channels;
    int    dstWidth = (unsigned int)((Width * step)); 
    for (int y = 0; y < Height; ++y)
    {
        int    prevline = 0;
        int    nextline = 0;
        if (y > 0)
            prevline = -Width;
        if (y < Height - 1)
            nextline = Width;
        unsigned int* srcRowPtr = input + y*Width;
        unsigned int* dstRowPtr = output + (y<<1)*dstWidth;
        for (int x = 0; x < Width; ++x)
        {
            unsigned int&    pixel5 = pixel[5];
            unsigned int&    pixel2 = pixel[2];
            unsigned int&    pixel8 = pixel[8];
            unsigned int&    pixel1 = pixel[1];
            unsigned int&    pixel4 = pixel[4];
            unsigned int&    pixel7 = pixel[7];
            unsigned int&    pixel3 = pixel[3];
            unsigned int&    pixel6 = pixel[6];
            unsigned int&    pixel9 = pixel[9];
            unsigned int&    gray5 = gray[5];
            unsigned int&    gray2 = gray[2];
            unsigned int&    gray8 = gray[8];
            unsigned int&    gray1 = gray[1];
            unsigned int&    gray4 = gray[4];
            unsigned int&    gray7 = gray[7];
            unsigned int&    gray3 = gray[3];
            unsigned int&    gray6 = gray[6];
            unsigned int&    gray9 = gray[9];
            pixel2 = srcRowPtr[prevline];
            pixel5 = srcRowPtr[0];
            pixel8 = srcRowPtr[nextline];
            if (x <= 0)
            {
                pixel1 = pixel2;
                pixel4 = pixel5;
                pixel7 = pixel8;
            }
            else
            {
                pixel1 = srcRowPtr[prevline - 1];
                pixel4 = srcRowPtr[-1];
                pixel7 = srcRowPtr[nextline - 1];
            }
            if (x >= Width - 1)
            {
                pixel3 = pixel2;
                pixel6 = pixel5;
                pixel9 = pixel8;
            }
            else
            {
                pixel3 = srcRowPtr[prevline + 1];
                pixel6 = srcRowPtr[1];
                pixel9 = srcRowPtr[nextline + 1];
            }
            int    pattern = 0;
            int flag = 1;
            for (int k = 1; k <= 9; ++k)
            {
                gray[k] = (7471 * ((pixel[k] >> 16) & 0xFF) + 38470 * ((pixel[k] >> 8) & 0xFF) + 19595 * (pixel[k] & 0xFF)) >> 16; 
            }
            for (int i = 1; i <= 9; ++i)
            {
                if (i != 5)
                {
                    if (pixel[i] != pixel5)
                        pattern |= flag;
                    flag *= 2;
                }
            }
            unsigned int *    dstCurLine = &dstRowPtr[dstWidth];
            unsigned int *    dstCurLineNextPixel = &dstRowPtr[dstWidth + 1];

            switch (pattern)
            {
            case 0:
            case 1:
            case 4:
            case 5:
            case 32:
            case 33:
            case 36:
            case 37:
            case 128:
            case 129:
            case 132:
            case 133:
            case 160:
            case 161:
            case 164:
            case 165:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 2:
            case 34:
            case 130:
            case 162:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 16:
            case 17:
            case 48:
            case 49:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 64:
            case 65:
            case 68:
            case 69:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 8:
            case 12:
            case 136:
            case 140:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 3:
            case 35:
            case 131:
            case 163:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 6:
            case 38:
            case 134:
            case 166:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 20:
            case 21:
            case 52:
            case 53:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 144:
            case 145:
            case 176:
            case 177:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 192:
            case 193:
            case 196:
            case 197:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 96:
            case 97:
            case 100:
            case 101:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 40:
            case 44:
            case 168:
            case 172:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 9:
            case 13:
            case 137:
            case 141:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 18:
            case 50:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 80:
            case 81:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 72:
            case 76:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 10:
            case 138:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 66:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 24:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 7:
            case 39:
            case 135:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 148:
            case 149:
            case 180:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 224:
            case 225:
            case 228:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 41:
            case 45:
            case 169:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 22:
            case 54:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 208:
            case 209:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 104:
            case 108:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 11:
            case 139:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 19:
            case 51:
                if (gray2 == gray6)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel2, pixel4, 5, 2, 1, 3);
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 146:
            case 178:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                {
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 3, 3, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                break;
            case 84:
            case 85:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                if (gray6 == gray8)
                {
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel6, pixel2, 5, 2, 1, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                break;
            case 112:
            case 113:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray6 == gray8)
                {
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 5, 2, 1, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 3, 3, 3);
                }
                else
                {
                    dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                }
                break;
            case 200:
            case 204:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                {
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 3, 3, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel8, pixel6, 5, 2, 1, 3);
                }
                else
                {
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                }
                break;
            case 73:
            case 77:
                if (gray8 == gray4)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 5, 2, 1, 3);
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                }
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 42:
            case 170:
                if (gray4 == gray2)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 3, 3, 3);
                    dstCurLine[0] = Interpolate_3(pixel5, pixel4, pixel8, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                    dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                }
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 14:
            case 142:
                if (gray4 == gray2)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 3, 3, 3);
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 67:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 70:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 28:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 152:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 194:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 98:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 56:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 25:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 26:
            case 31:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 82:
            case 214:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 88:
            case 248:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 74:
            case 107:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 27:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 86:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 216:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 106:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 30:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 210:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 120:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 75:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 29:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 198:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 184:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 99:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 57:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 71:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 156:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 226:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 60:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 195:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 102:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 153:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 58:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 83:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 92:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 202:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 78:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 154:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 114:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 89:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 90:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 23:
            case 55:
                if (gray2 == gray6)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel2, pixel4, 5, 2, 1, 3);
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                    dstRowPtr[1] = pixel5;
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 150:
            case 182:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                {
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 3, 3, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[1] = pixel5;
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                break;
            case 212:
            case 213:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                if (gray6 == gray8)
                {
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel6, pixel2, 5, 2, 1, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                    dstCurLineNextPixel [0] = pixel5;
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                break;
            case 240:
            case 241:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray6 == gray8)
                {
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 5, 2, 1, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 3, 3, 3);
                }
                else
                {
                    dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                    dstCurLineNextPixel [0] = pixel5;
                }
                break;
            case 232:
            case 236:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                {
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 3, 3, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel8, pixel6, 5, 2, 1, 3);
                }
                else
                {
                    dstCurLine[0] = pixel5;
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                }
                break;
            case 105:
            case 109:
                if (gray8 == gray4)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 5, 2, 1, 3);
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                    dstCurLine[0] = pixel5;
                }
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 43:
            case 171:
                if (gray4 == gray2)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 3, 3, 3);
                    dstCurLine[0] = Interpolate_3(pixel5, pixel4, pixel8, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[0] = pixel5;
                    dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                }
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 15:
            case 143:
                if (gray4 == gray2)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 3, 3, 3);
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[0] = pixel5;
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 124:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 203:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 62:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 211:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 118:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 217:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 110:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 155:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 188:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 185:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 61:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 157:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 103:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 227:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 230:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 199:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 220:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 158:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 234:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 242:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 59:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 121:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 87:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 79:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 122:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 94:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 218:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 91:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 229:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 167:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 173:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 181:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 186:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 115:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 93:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 206:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 201:
            case 205:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 6, 1, 1, 3);
                else
                    dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 46:
            case 174:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 6, 1, 1, 3);
                else
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 147:
            case 179:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 6, 1, 1, 3);
                else
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 116:
            case 117:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 6, 1, 1, 3);
                else
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 189:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 231:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 126:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 219:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 125:
                if (gray8 == gray4)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 5, 2, 1, 3);
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                    dstCurLine[0] = pixel5;
                }
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 221:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray6 == gray8)
                {
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel6, pixel2, 5, 2, 1, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                    dstCurLineNextPixel [0] = pixel5;
                }
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                break;
            case 207:
                if (gray4 == gray2)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 3, 3, 3);
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[0] = pixel5;
                    dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 238:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                {
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 3, 3, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel8, pixel6, 5, 2, 1, 3);
                }
                else
                {
                    dstCurLine[0] = pixel5;
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                }
                break;
            case 190:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                {
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 3, 3, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[1] = pixel5;
                    dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                }
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 187:
                if (gray4 == gray2)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 3, 3, 3);
                    dstCurLine[0] = Interpolate_3(pixel5, pixel4, pixel8, 5, 2, 1, 3);
                }
                else
                {
                    dstRowPtr[0] = pixel5;
                    dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                }
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 243:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray6 == gray8)
                {
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 5, 2, 1, 3);
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 3, 3, 3);
                }
                else
                {
                    dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                    dstCurLineNextPixel [0] = pixel5;
                }
                break;
            case 119:
                if (gray2 == gray6)
                {
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel2, pixel4, 5, 2, 1, 3);
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 3, 3, 3);
                }
                else
                {
                    dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                    dstRowPtr[1] = pixel5;
                }
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 233:
            case 237:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 47:
            case 175:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                break;
            case 151:
            case 183:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 244:
            case 245:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 250:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 123:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 95:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 222:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 252:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel2, 2, 1, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 249:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel2, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 235:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_3(pixel5, pixel3, pixel6, 2, 1, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 111:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel6, 2, 1, 1, 2);
                break;
            case 63:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel9, pixel8, 2, 1, 1, 2);
                break;
            case 159:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel8, 2, 1, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 215:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_3(pixel5, pixel7, pixel4, 2, 1, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 246:
                dstRowPtr[0] = Interpolate_3(pixel5, pixel1, pixel4, 2, 1, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 254:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel1, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 253:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                dstRowPtr[1] = Interpolate_2(pixel5, pixel2, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 251:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel3, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 239:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                dstRowPtr[1] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel6, 3, 1, 2);
                break;
            case 127:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 2, 1, 1, 2);
                else
                    dstRowPtr[1] = pixel5;
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 2, 1, 1, 2);
                else
                    dstCurLine[0] = pixel5;
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel9, 3, 1, 2);
                break;
            case 191:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                dstCurLineNextPixel [0] = Interpolate_2(pixel5, pixel8, 3, 1, 2);
                break;
            case 223:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 2, 1, 1, 2);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel7, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 2, 1, 1, 2);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 247:
                dstRowPtr[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                dstCurLine[0] = Interpolate_2(pixel5, pixel4, 3, 1, 2);
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            case 255:
                if (gray4 == gray2)
                    dstRowPtr[0] = Interpolate_3(pixel5, pixel4, pixel2, 14, 1, 1, 4);
                else
                    dstRowPtr[0] = pixel5;
                if (gray2 == gray6)
                    dstRowPtr[1] = Interpolate_3(pixel5, pixel2, pixel6, 14, 1, 1, 4);
                else
                    dstRowPtr[1] = pixel5;
                if (gray8 == gray4)
                    dstCurLine[0] = Interpolate_3(pixel5, pixel8, pixel4, 14, 1, 1, 4);
                else
                    dstCurLine[0] = pixel5;
                if (gray6 == gray8)
                    dstCurLineNextPixel [0] = Interpolate_3(pixel5, pixel6, pixel8, 14, 1, 1, 4);
                else
                    dstCurLineNextPixel [0] = pixel5;
                break;
            default:
                break;
            }
            srcRowPtr++;
            dstRowPtr += step;
        } 
    }
}

  本代码仅支持4通道32位,若1通道以及3通道,可参考改动之。

也不是很麻烦,代码也是挺简单的,虽然有点长,懒得写注释了,感兴趣的可以看看官方的代码。

俺这代码主要是做了一些算法上的简单优化。

好久没发博文里,上来冒个泡。不喜请喷。

俺的联系方式如下:

邮箱: gaozhihan@vip.qq.com

QQ:200759103

联系我时请说明来意,不然一律忽略,谢谢。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档