Animatroller.Framework.Import.DmxPlayback.UpdatePixelMapping C# (CSharp) Method

UpdatePixelMapping() private method

private UpdatePixelMapping ( Utility.PixelMap[]>.Dictionary pixelMapping ) : void
pixelMapping Utility.PixelMap[]>.Dictionary
return void
        private void UpdatePixelMapping(Dictionary<int, Utility.PixelMap[]> pixelMapping)
        {
            int bytesPerPixel = Bitmap.GetPixelFormatSize(PixelFormat.Format24bppRgb) / 8;
            int stride = 4 * ((this.pixelWidth * bytesPerPixel + 3) / 4);

            foreach (var kvp in pixelMapping)
            {
                int[] mapping;
                if (!this.pixelMapping.TryGetValue(kvp.Key, out mapping))
                {
                    mapping = new int[512];
                    for (int i = 0; i < mapping.Length; i++)
                        mapping[i] = -1;

                    this.pixelMapping.Add(kvp.Key, mapping);
                }

                for (int pos = 0; pos < Math.Min(kvp.Value.Length, mapping.Length); pos++)
                {
                    var map = kvp.Value[pos];

                    if (map.X >= this.pixelWidth || map.Y >= this.pixelHeight)
                        continue;

                    int rgbOffset = -1;
                    switch (map.ColorComponent)
                    {
                        case Utility.ColorComponent.R:
                            rgbOffset = 2;
                            break;

                        case Utility.ColorComponent.G:
                            rgbOffset = 1;
                            break;

                        case Utility.ColorComponent.B:
                            rgbOffset = 0;
                            break;
                    }
                    if (rgbOffset == -1)
                        continue;

                    int bytePos = map.X * 3 + map.Y * stride + rgbOffset;

                    if (bytePos >= stride * this.pixelHeight)
                        throw new ArgumentOutOfRangeException("Invalid pixel mapping");

                    mapping[pos] = bytePos;
                }
            }
        }