/// <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; } } } }
/// <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; } } } }