void descramblingPixels(int startX, int endX, int startY, int endY)
        {
            for (int k = 2; k >= 0; k--)
            {
                for (int i = endX - 1; i >= startX; i--)
                {
                    for (int j = endY - 1; j >= startY; j--)
                    {
                        AlgorithmWrapper.WrapperPixels pixel = cppClass.descramblingPixels(i, j, k);

                        Color first  = Color.FromArgb(pixel.fR, pixel.fG, pixel.fB);
                        Color second = Color.FromArgb(pixel.sR, pixel.sG, pixel.sB);;
                        Color third  = Color.FromArgb(pixel.tR, pixel.tG, pixel.tB);;

                        if (VisualisationCheckBox.Checked)
                        {
                            if (Image1.InvokeRequired)
                            {
                                Image1.Invoke(new MethodInvoker(
                                                  delegate()
                                {
                                    bitmap.SetPixel(pixel.fposY, pixel.fposX, first);
                                    bitmap.SetPixel(pixel.sposY, pixel.sposX, second);
                                    bitmap.SetPixel(pixel.tposY, pixel.tposX, third);
                                }));
                            }
                        }
                        else
                        {
                            bitmap.SetPixel(pixel.fposY, pixel.fposX, first);
                            bitmap.SetPixel(pixel.sposY, pixel.sposX, second);
                            bitmap.SetPixel(pixel.tposY, pixel.tposX, third);
                        }

                        Progress();
                    }

                    if (VisualisationCheckBox.Checked)
                    {
                        if (Image1.InvokeRequired)
                        {
                            Image1.Invoke(new MethodInvoker(
                                              delegate() { Image1.Image = bitmap; }));
                        }
                    }
                }
            }
        }
        void threadScramblingPixels(object data)
        {
            ThreadParameters param = (ThreadParameters)data;

            for (int k = 0; k < 3; k++)
            {
                for (int i = param.startX; i < param.endX; i++)
                {
                    for (int j = param.startY; j < param.endY; j++)
                    {
                        AlgorithmWrapper.WrapperPixels pixel = cppClass.threadScramblingPixels(i, j, k, param.startX, param.endX, param.startY, param.endY);
                    }
                    mutProgress.WaitOne();
                    Progress();
                    mutProgress.ReleaseMutex();
                }
            }
        }
        void threadDescramblingPixels(object data)
        {
            ThreadParameters param = (ThreadParameters)data;

            for (int k = 2; k >= 0; k--)
            {
                for (int i = param.endX - 1; i >= param.startX; i--)
                {
                    for (int j = param.endY - 1; j >= param.startY; j--)
                    {
                        AlgorithmWrapper.WrapperPixels pixel = cppClass.threadDescramblingPixels(i, j, k, param.startX, param.endX, param.startY, param.endY);

                        mutProgress.WaitOne();
                        Progress();
                        mutProgress.ReleaseMutex();
                    }
                }
            }
        }