protected void UpdateMap()
        {
            BitMap.Lock();
            unsafe {
                var pbuff   = (byte *)BitMap.BackBuffer.ToPointer();
                var bpp     = BitMap.Format.BitsPerPixel / 8;
                var h       = BitMap.Height;
                var w       = BitMap.Width;
                var s       = BitMap.BackBufferStride;
                var neurons = network.Layers[0].Neurons;
                var i       = 0;
                var v       = Convert.ToInt32(DisplayChannels.ShowRed) + Convert.ToInt32(DisplayChannels.ShowGreen) + Convert.ToInt32(DisplayChannels.ShowBlue);
                var f       = 1d / v;

                for (var y = 0; y < h; y++)
                {
                    for (var x = 0; x < w; x++, i++)
                    {
                        var loc     = y * s + x * bpp;
                        var weights = neurons[i].InputWeights;
                        var r       = DisplayChannels.ShowRed ? weights[0] * 255 : 0;
                        var g       = DisplayChannels.ShowGreen ? weights[1] * 255 : 0;
                        var b       = DisplayChannels.ShowBlue ? weights[2] * 255 : 0;

                        if (DisplayChannels.ShowGrayscale)
                        {
                            var gray = (byte)(f * r + f * g + f * b);
                            pbuff[loc]     = gray;
                            pbuff[loc + 1] = gray;
                            pbuff[loc + 2] = gray;
                        }
                        else
                        {
                            pbuff[loc]     = (byte)r;
                            pbuff[loc + 1] = (byte)g;
                            pbuff[loc + 2] = (byte)b;
                        }
                    }
                }
            }

            BitMap.AddDirtyRect(new Int32Rect(0, 0, (int)BitMap.Width, (int)BitMap.Height));
            BitMap.Unlock();
        }