private static unsafe DemotivatorPixels ToDemotivatorPixels(Bitmap bitmap)
        {
            var lowerSide           = bitmap.Height > bitmap.Width ? bitmap.Width : bitmap.Height;
            var lowerAdditionHeight = lowerSide / 4;
            var upperAdditionHeight = lowerSide / 20;
            var height = bitmap.Height + lowerAdditionHeight + upperAdditionHeight;

            var addtionWidth = lowerSide / 16;
            var width        = bitmap.Width + addtionWidth * 2;

            var rect   = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
            var matrix = new DemotivatorPixels(height, width);

            Console.WriteLine(bitmap.PixelFormat);
            var bmpData = bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            var ptr     = bmpData.Scan0;

            for (var j = 0; j < height; j++)
            {
                for (var i = 0; i < width; i++)
                {
                    if (j < upperAdditionHeight || i < addtionWidth || i >= width - addtionWidth || j >= height - lowerAdditionHeight)
                    {
                        if (j >= upperAdditionHeight - lowerSide / 200 && j < height - lowerAdditionHeight + lowerSide / 200 && i >= addtionWidth - lowerSide / 200 && i < width - addtionWidth + lowerSide / 200)
                        {
                            matrix.Pixels[j, i] = new Pixel(255, 255, 255, 255);
                        }
                        else
                        {
                            matrix.Pixels[j, i] = new Pixel(0, 0, 0, 255);
                        }
                        continue;
                    }
                    var x = *(Pixel *)ptr;
                    ptr = ptr + 4;
                    matrix.Pixels[j, i] = x;
                }
            }

            bitmap.UnlockBits(bmpData);

            return(matrix);
        }
        private static unsafe Bitmap ToBitmap(DemotivatorPixels matrix)
        {
            var bmp     = new Bitmap(matrix.Width, matrix.Height);
            var rect    = new Rectangle(0, 0, matrix.Width, matrix.Height);
            var bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            var ptr     = bmpData.Scan0;

            for (var j = 0; j < rect.Height; j++)
            {
                for (var i = 0; i < rect.Width; i++)
                {
                    var pixel = matrix.Pixels[j, i];
                    *(Pixel *)ptr = pixel;
                    ptr           = ptr + 4;
                }
            }

            bmp.UnlockBits(bmpData);

            return(bmp);
        }