コード例 #1
0
        /// <summary>
        /// I only support the cached map for now because the interface call is expensive.
        /// Generics (with interface constraint) have the same problem.
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="p"></param>
        /// <param name="cachedMap"></param>
        private static unsafe void CreateColorBufferMap(Grid <int> grid, int *p, CachedColorMap cachedMap)
        {
            var transparent = Color.Transparent.ToArgb();

            fixed(int *gridPtr = grid.Data)
            {
                for (var r = 0; r < grid.SizeY; r++)
                {
                    // flip y-axis
                    int  rr = grid.SizeY - r - 1;
                    int *g  = gridPtr + rr * grid.Data.GetLength(1);
                    for (var c = 0; c < grid.SizeX; c++)
                    {
                        if (*g != grid.FillVal)
                        {
                            (*p) = cachedMap.GetColor(*g);
                        }
                        else
                        {
                            (*p) = transparent;
                        }

                        ++p;
                        ++g;
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// I only support the cached map for now because the interface call is expensive.
        /// Generics (with interface constraint) have the same problem.
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="p"></param>
        /// <param name="cachedMap"></param>
        private static unsafe void CreateColorBufferMap(Grid<int> grid, int* p, CachedColorMap cachedMap)
        {
            var transparent = Color.Transparent.ToArgb();

            fixed (int* gridPtr = grid.Data)
            {
                for (var r = 0; r < grid.SizeY; r++)
                {
                    // flip y-axis
                    int rr = grid.SizeY - r - 1;
                    int* g = gridPtr + rr * grid.Data.GetLength(1);
                    for (var c = 0; c < grid.SizeX; c++)
                    {
                        if (*g != grid.FillVal)
                            (*p) = cachedMap.GetColor(*g);
                        else
                            (*p) = transparent;

                        ++p;
                        ++g;
                    }
                }
            }
        }