public static int TestImageCompareToImage(string file, uint line, string message, Image expected, Image actual)
    {
        var result = new CuTestImageResult {
            max_diff = 0, pixels_changed = 0
        };

        if (actual == null)
        {
            gdTestErrorMsg(file, line, "Image is NULL\n");
            return(0);
        }

        int width_a  = expected.SX();
        int height_a = expected.SY();
        int width_b  = actual.SX();
        int height_b = actual.SY();

        if (width_a != width_b || height_a != height_b)
        {
            gdTestErrorMsg(file, line, "Image size mismatch: (%ux%u) vs. (%ux%u)\n       for %s vs. buffer\n", width_a, height_a, width_b, height_b, file);
            return(0);
        }

        using (var surface_diff = new Image(width_a, height_a, true))
        {
            TestImageDiff(expected, actual, surface_diff, result);
            if (result.pixels_changed > 0)
            {
                gdTestErrorMsg(file, line, "Total pixels changed: %d with a maximum channel difference of %d.\n", result.pixels_changed, result.max_diff);

                int p = file.Length;
                p--;

                /* Use only the filename (and store it in the bld dir not the src dir
                 */
                while (p > 0 && (file[p] != '/' && file[p] != '\\'))
                {
                    p--;
                }
                string file_diff = string.Format("{0}_{1:D}_diff.png", file + p + 1, line);
                string file_out  = string.Format("{0}_{1:D}_out.png", file + p + 1, line);

                surface_diff.Png(file_diff);
                actual.Png(file_out);
            }
            else
            {
                return(1);
            }
        }
        return(0);
    }
Esempio n. 2
0
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdXXX_VERSION_STR(mjr, mnr, rev, ext) mjr "." mnr "." rev ext
        #define GDXXX_VERSION_STR
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdXXX_STR(s) gd.gdXXX_SSTR(s)
        #define GDXXX_STR
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdXXX_SSTR(s) #s
        #define GDXXX_SSTR
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define GD_VERSION_STRING "GD_MAJOR_VERSION" "." "GD_MINOR_VERSION" "." "GD_RELEASE_VERSION" GD_EXTRA_VERSION
        #define GD_VERSION_STRING
        #if _WIN32 || CYGWIN || _WIN32_WCE
        #if BGDWIN32
        #if NONDLL
        #define BGD_EXPORT_DATA_PROT
        #else
        #if __GNUC__
        #define BGD_EXPORT_DATA_PROT
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_EXPORT_DATA_PROT __declspec(dllexport)
        #define BGD_EXPORT_DATA_PROT
        #endif
        #endif
        #else
        #if __GNUC__
        #define BGD_EXPORT_DATA_PROT
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_EXPORT_DATA_PROT __declspec(dllimport)
        #define BGD_EXPORT_DATA_PROT
        #endif
        #endif
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_STDCALL __stdcall
        #define BGD_STDCALL
        #define BGD_EXPORT_DATA_IMPL
        #else
        #if HAVE_VISIBILITY
        #define BGD_EXPORT_DATA_PROT
        #define BGD_EXPORT_DATA_IMPL
        #else
        #define BGD_EXPORT_DATA_PROT
        #define BGD_EXPORT_DATA_IMPL
        #endif
        #define BGD_STDCALL
        #endif
        #if BGD_EXPORT_DATA_PROT_ConditionalDefinition1
        #if BGD_STDCALL_ConditionalDefinition1
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) rt __stdcall
        #define BGD_DECLARE
        #elif BGD_STDCALL_ConditionalDefinition2
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) rt
        #define BGD_DECLARE
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) rt BGD_STDCALLTangibleTempImmunity
        #define BGD_DECLARE
        #endif
        #elif BGD_EXPORT_DATA_PROT_ConditionalDefinition2
        #if BGD_STDCALL_ConditionalDefinition1
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) rt __stdcall
        #define BGD_DECLARE
        #elif BGD_STDCALL_ConditionalDefinition2
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) rt
        #define BGD_DECLARE
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) rt BGD_STDCALLTangibleTempImmunity
        #define BGD_DECLARE
        #endif
        #elif BGD_EXPORT_DATA_PROT_ConditionalDefinition3
        #if BGD_STDCALL_ConditionalDefinition1
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) __declspec(dllexport) rt __stdcall
        #define BGD_DECLARE
        #elif BGD_STDCALL_ConditionalDefinition2
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) __declspec(dllexport) rt
        #define BGD_DECLARE
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) __declspec(dllexport) rt BGD_STDCALLTangibleTempImmunity
        #define BGD_DECLARE
        #endif
        #elif BGD_EXPORT_DATA_PROT_ConditionalDefinition4
        #if BGD_STDCALL_ConditionalDefinition1
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) __declspec(dllimport) rt __stdcall
        #define BGD_DECLARE
        #elif BGD_STDCALL_ConditionalDefinition2
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) __declspec(dllimport) rt
        #define BGD_DECLARE
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) __declspec(dllimport) rt BGD_STDCALLTangibleTempImmunity
        #define BGD_DECLARE
        #endif
        #else
        #if BGD_STDCALL_ConditionalDefinition1
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) BGD_EXPORT_DATA_PROTTangibleTempImmunity rt __stdcall
        #define BGD_DECLARE
        #elif BGD_STDCALL_ConditionalDefinition2
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define BGD_DECLARE (rt) BGD_EXPORT_DATA_PROTTangibleTempImmunity rt
        #define BGD_DECLARE
        #else
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define Bgd.gd_DECLARE(rt) BGD_EXPORT_DATA_PROTTangibleTempImmunity rt BGD_STDCALLTangibleTempImmunity
        #define BGD_DECLARE
        #endif
        #endif
        #if __cplusplus
        #endif
        #if __cplusplus
        #endif
        #define GD_IO_H
        #if VMS
        #endif
        #if __cplusplus
        #endif
        #define gdMaxColors
        #define gdAlphaMax
        #define gdAlphaOpaque
        #define gdAlphaTransparent
        #define gdRedMax
        #define gdGreenMax
        #define gdBlueMax
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTrueColorGetAlpha(c) (((c) & 0x7F000000) >> 24)
        #define gdTrueColorGetAlpha
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTrueColorGetRed(c) (((c) & 0xFF0000) >> 16)
        #define gdTrueColorGetRed
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTrueColorGetGreen(c) (((c) & 0x00FF00) >> 8)
        #define gdTrueColorGetGreen
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTrueColorGetBlue(c) ((c) & 0x0000FF)
        #define gdTrueColorGetBlue
        #define gdEffectReplace
        #define gdEffectAlphaBlend
        #define gdEffectNormal
        #define gdEffectOverlay
        #define GD_TRUE
        #define GD_FALSE
        #define GD_EPSILON
        #define M_PI
        #define gdDashSize
        #define gdStyled
        #define gdBrushed
        #define gdStyledBrushed
        #define gdTiled
        #define gdTransparent
        #define gdAntiAliased
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gdImageCreatePalette gdImageCreate
        #define gdImageCreatePalette
        #define gdFTEX_LINESPACE
        #define gdFTEX_CHARMAP
        #define gdFTEX_RESOLUTION
        #define gdFTEX_DISABLE_KERNING
        #define gdFTEX_XSHOW
        #define gdFTEX_FONTPATHNAME
        #define gdFTEX_FONTCONFIG
        #define gdFTEX_RETURNFONTPATHNAME
        #define gdFTEX_Unicode
        #define gdFTEX_Shift_JIS
        #define gdFTEX_Big5
        #define gdFTEX_Adobe_Custom
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTrueColor(r, g, b) (((r) << 16) + ((g) << 8) + (b))
        #define gdTrueColor
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTrueColorAlpha(r, g, b, a) (((a) << 24) + ((r) << 16) + ((g) << 8) + (b))
        #define gdTrueColorAlpha
        #define gdArc
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gdPie gdArc
        #define gdPie
        #define gdChord
        #define gdNoFill
        #define gdEdged
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageTrueColor(im) ((im)->trueColor)
        #define gdImageTrueColor
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageSX(im) ((im)->sx)
        #define gdImageSX
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageSY(im) ((im)->sy)
        #define gdImageSY
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageColorsTotal(im) ((im)->colorsTotal)
        #define gdImageColorsTotal
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageRed(im, c) ((im)->trueColor ? (((c) & 0xFF0000) >> 16) : (im)->red[(c)])
        #define gdImageRed
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageGreen(im, c) ((im)->trueColor ? (((c) & 0x00FF00) >> 8) : (im)->green[(c)])
        #define gdImageGreen
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageBlue(im, c) ((im)->trueColor ? ((c) & 0x0000FF) : (im)->blue[(c)])
        #define gdImageBlue
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageAlpha(im, c) ((im)->trueColor ? (((c) & 0x7F000000) >> 24) : (im)->alpha[(c)])
        #define gdImageAlpha
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageGetTransparent(im) ((im)->transparent)
        #define gdImageGetTransparent
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageGetInterlaced(im) ((im)->interlace)
        #define gdImageGetInterlaced
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)]
        #define gdImagePalettePixel
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)]
        #define gdImageTrueColorPixel
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageResolutionX(im) (im)->res_x
        #define gdImageResolutionX
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdImageResolutionY(im) (im)->res_y
        #define gdImageResolutionY
        #define GD2_CHUNKSIZE
        #define GD2_CHUNKSIZE_MIN
        #define GD2_CHUNKSIZE_MAX
        #define GD2_VERS
        #define GD2_ID
        #define GD2_FMT_RAW
        #define GD2_FMT_COMPRESSED
        #define GD_FLIP_HORINZONTAL
        #define GD_FLIP_VERTICAL
        #define GD_FLIP_BOTH
        #define GD_CMP_IMAGE
        #define GD_CMP_NUM_COLORS
        #define GD_CMP_COLOR
        #define GD_CMP_SIZE_X
        #define GD_CMP_SIZE_Y
        #define GD_CMP_TRANSPARENT
        #define GD_CMP_BACKGROUND
        #define GD_CMP_INTERLACE
        #define GD_CMP_TRUECOLOR
        #define GD_RESOLUTION
        #if __cplusplus
        #endif
        #if __cplusplus
        #endif
        #define GDFX_H
        #if __cplusplus
        #endif
        #if __cplusplus
        #endif
        #define GDTEST_TOP_DIR
        #define GDTEST_STRING_MAX
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdAssertImageEqualsToFile(ex,ac) gd.gdTestImageCompareToFile(__FILE__,__LINE__,NULL,(ex),(ac))
        #define gdAssertImageEqualsToFile
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdAssertImageFileEqualsMsg(ex,ac) gd.gdTestImageCompareFiles(__FILE__,__LINE__,(ms),(ex),(ac))
        #define gdAssertImageFileEqualsMsg
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdAssertImageEquals(tc,ex,ac) CuAssertImageEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac))
        #define gdAssertImageEquals
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdAssertImageEqualsMsg(tc,ex,ac) CuAssertImageEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac))
        #define gdAssertImageEqualsMsg
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTestAssert(cond) _gd.gdTestAssert(__FILE__, __LINE__, "assert failed in <%s:%i>\n", (cond))
        #define gdTestAssert
    //C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
    //ORIGINAL LINE: #define gd.gdTestErrorMsg(...) _gd.gdTestErrorMsg(__FILE__, __LINE__, __VA_ARGS__)
        #define gdTestErrorMsg

    static int Main()
    {
        gdImageStruct im;
        gdImageStruct ex;
        FILE          fp;
        gdScatter     s = new gd.gdScatter();

        int[]             colors = { 0xFF0000, 0x00FF00 };
        CuTestImageResult r      = new CuTestImageResult();

        fp = fopen(DefineConstants.GDTEST_TOP_DIR "/gdimagescatterex/bug00208.png", "rb");
        if (fp == null)
        {
            fprintf(stderr, "could not open file\n");
            return(1);
        }
        im = gd.gdImageCreateFromPng(fp);
        fclose(fp);
        if (im == null)
        {
            fprintf(stderr, "could not create image\n");
            return(1);
        }

        s.sub        = 1;
        s.plus       = 3;
        s.seed       = 0;
        s.num_colors = 2;
        s.colors     = colors;
        if (!gd.gdImageScatterEx(im, s))
        {
            gd.gdImageDestroy(im);
            fprintf(stderr, "could not scatter\n");
            return(1);
        }

        fp = fopen(DefineConstants.GDTEST_TOP_DIR "/gdimagescatterex/bug00208_2.png", "rb");
        if (fp == null)
        {
            fprintf(stderr, "could not open file\n");
            gd.gdImageDestroy(im);
            return(1);
        }
        ex = gd.gdImageCreateFromPng(fp);
        fclose(fp);
        if (ex == null)
        {
            fprintf(stderr, "could not create image\n");
            gd.gdImageDestroy(im);
            return(1);
        }
        r.pixels_changed = 0;
        GlobalMembersGdtest.gd.gdTestImageDiff(im, ex, null, r);
        gd.gdImageDestroy(ex);
        gd.gdImageDestroy(im);
        if (r.pixels_changed > 10000)
        {
            fprintf(stderr, "too much diff: %d\n", r.pixels_changed);
            return(1);
        }
        return(0);
    }
    public static int gdTestImageCompareToImage(string file, uint line, string message, gdImageStruct expected, gdImageStruct actual)
    {
        uint              width_a;
        uint              height_a;
        uint              width_b;
        uint              height_b;
        gdImageStruct     surface_diff = null;
        CuTestImageResult result       = new CuTestImageResult {
            max_diff = 0, pixels_changed = 0
        };

        if (actual == null)
        {
            GlobalMembersGdtest.gdTestErrorMsg(file, line, "Image is NULL\n");
            goto fail;
        }

        width_a  = (uint)((expected).sx);
        height_a = (uint)((expected).sy);
        width_b  = (uint)((actual).sx);
        height_b = (uint)((actual).sy);

        if (width_a != width_b || height_a != height_b)
        {
            GlobalMembersGdtest.gdTestErrorMsg(file, line, "Image size mismatch: (%ux%u) vs. (%ux%u)\n       for %s vs. buffer\n", width_a, height_a, width_b, height_b, file);
            goto fail;
        }

        surface_diff = gd.gdImageCreateTrueColor((int)width_a, (int)height_a);

        GlobalMembersGdtest.gdTestImageDiff(expected, actual, surface_diff, result);
        if (result.pixels_changed > 0)
        {
            string file_diff = new string(new char[255]);
            string file_out  = new string(new char[1024]);
            int    p;

            GlobalMembersGdtest.gdTestErrorMsg(file, line, "Total pixels changed: %d with a maximum channel difference of %d.\n", result.pixels_changed, result.max_diff);

            p = file.Length;
            p--;

            /* Use only the filename (and store it in the bld dir not the src dir
             */
            while (p > 0 && (file[p] != '/' && file[p] != '\\'))
            {
                p--;
            }
            file_diff = string.Format("{0}_{1:D}_diff.png", file + p + 1, line);
            file_out  = string.Format("{0}_{1:D}_out.png", file + p + 1, line);

            gd.gdImagePng(surface_diff, file_diff);

            gd.gdImagePng(actual, file_out);
        }
        else
        {
            if (surface_diff != null)
            {
                gd.gdImageDestroy(surface_diff);
            }
            return(1);
        }

fail:
        if (surface_diff != null)
        {
            gd.gdImageDestroy(surface_diff);
        }
        return(0);
    }
    public static void TestImageDiff(Image buf_a, Image buf_b, Image buf_diff, CuTestImageResult result_ret)
    {
        int x;
        int y;
        int c1;
        int c2;

        for (y = 0; y < ((buf_a).Width()); y++)
        {
            for (x = 0; x < ((buf_a).Height()); x++)
            {
                c1 = buf_a.GetTrueColorPixel(x, y);
                c2 = buf_b.GetTrueColorPixel(x, y);

                /* check if the pixels are the same */
                if (c1 != c2)
                {
                    int  r1;
                    int  b1;
                    int  g1;
                    int  a1;
                    int  r2;
                    int  b2;
                    int  g2;
                    int  a2;
                    uint diff_a;
                    uint diff_r;
                    uint diff_g;
                    uint diff_b;

                    a1      = (((c1) & 0x7F000000) >> 24);
                    a2      = (((c2) & 0x7F000000) >> 24);
                    diff_a  = (uint)Math.Abs(a1 - a2);
                    diff_a *= 4; // emphasize

                    if (diff_a != 0)
                    {
                        diff_a += 128; // make sure it's visible
                    }
                    if (diff_a > DefineConstants.gdAlphaMax)
                    {
                        diff_a = DefineConstants.gdAlphaMax / 2;
                    }

                    r1     = (((c1) & 0xFF0000) >> 16);
                    r2     = (((c2) & 0xFF0000) >> 16);
                    diff_r = (uint)Math.Abs(r1 - r2);
                    // diff_r *= 4;  // emphasize
                    if (diff_r != 0)
                    {
                        diff_r += DefineConstants.gdRedMax / 2; // make sure it's visible
                    }
                    if (diff_r > 255)
                    {
                        diff_r = 255;
                    }

                    g1     = (((c1) & 0x00FF00) >> 8);
                    g2     = (((c2) & 0x00FF00) >> 8);
                    diff_g = (uint)Math.Abs(g1 - g2);

                    diff_g *= 4; // emphasize
                    if (diff_g != 0)
                    {
                        diff_g += DefineConstants.gdGreenMax / 2; // make sure it's visible
                    }
                    if (diff_g > 255)
                    {
                        diff_g = 255;
                    }

                    b1      = ((c1) & 0x0000FF);
                    b2      = ((c2) & 0x0000FF);
                    diff_b  = (uint)Math.Abs(b1 - b2);
                    diff_b *= 4; // emphasize
                    if (diff_b != 0)
                    {
                        diff_b += DefineConstants.gdBlueMax / 2; // make sure it's visible
                    }
                    if (diff_b > 255)
                    {
                        diff_b = 255;
                    }

                    result_ret.pixels_changed++;
                    if (buf_diff != null)
                    {
                        buf_diff.SetPixel(x, y, (int)(((diff_a) << 24) + ((diff_r) << 16) + ((diff_g) << 8) + (diff_b)));
                    }
                }
                else
                {
                    if (buf_diff != null)
                    {
                        buf_diff.SetPixel(x, y, (((0) << 24) + ((255) << 16) + ((255) << 8) + (255)));
                    }
                }
            }
        }
    }