private void FillBitmap <T>(Bitmap bitmap, BitmapData bitmapData, Dataset dataset, int xOff, int yOff, int width, int height, int imageWidth, int imageHeight, int targetPixelSpace, int lineSpace, string legendFilename) { T[] values = GdalHelper.GetValuesForBand <T>(dataset, 1, xOff, yOff, width, height, imageWidth, imageHeight); var gdalRasterLayer = layer as GdalRasterLayer; if (gdalRasterLayer == null) { throw new Exception("Trying to draw a GdalRasterLayer, while we got another type of layer!"); } FillBitmapPixels <T>(values, bitmapData, targetPixelSpace, imageWidth, imageHeight); }
private IMultiDimensionalArray <T> GetGdalValues <T>(int componentIndex, params IVariableFilter[] variableFilters) where T : IComparable { bool scale = false; int startX = 0, startY = 0, widthX = Grid.SizeX, widthY = Grid.SizeY; int rasterBandIndex = componentIndex + 1; //1 based index var sizeX = Grid.SizeX; var sizeY = Grid.SizeY; if (variableFilters.Length > 0) { foreach (IVariableFilter filter in variableFilters) { if (filter is VariableAggregationFilter) { var sampleFilter = filter as VariableAggregationFilter; if (sampleFilter.Variable == Grid.X) { startX = sampleFilter.MinIndex; widthX = sampleFilter.Count; sizeX = sampleFilter.MaxIndex - sampleFilter.MinIndex + 1; } if (sampleFilter.Variable == Grid.Y) { startY = Grid.SizeY - sampleFilter.MaxIndex - 1; widthY = sampleFilter.Count; sizeY = sampleFilter.MaxIndex - sampleFilter.MinIndex + 1; } scale = true; continue; } if (filter is IVariableValueFilter) { var variableValueFilter = filter as IVariableValueFilter; if (variableValueFilter.Values.Count > 1) { throw new NotSupportedException( "Multiple values for VariableValueFilter not supported by GDalFunctionStore"); } if (filter.Variable == Grid.X) { startX = Grid.X.Values.IndexOf(variableValueFilter.Values[0]); widthX = 1; } if (filter.Variable == Grid.Y) { //origin of our system is lower left corner, origin of gdal is upper left corner. startY = Grid.SizeY - Grid.Y.Values.IndexOf(variableValueFilter.Values[0]) - 1; widthY = 1; } continue; } if (filter is VariableIndexRangesFilter) { var rangesFilter = ((VariableIndexRangesFilter)filter); if (filter.Variable == Grid.X) { startX = rangesFilter.IndexRanges[0].First; widthX = rangesFilter.IndexRanges[0].Second - startX + 1; } if (filter.Variable == Grid.Y) { // rangesFilter.IndexRanges[0].First; startY = Grid.SizeY - rangesFilter.IndexRanges[0].Second - 1; widthY = Grid.SizeY - startY - rangesFilter.IndexRanges[0].First; } } if (filter is VariableIndexRangeFilter) { var variableIndexRangeFilter = filter as VariableIndexRangeFilter; if (filter.Variable == Grid.X) { startX = variableIndexRangeFilter.MinIndex; widthX = 1 + variableIndexRangeFilter.MaxIndex - variableIndexRangeFilter.MinIndex; } if (filter.Variable == Grid.Y) { startY = Grid.SizeY - variableIndexRangeFilter.MaxIndex - 1; widthY = Grid.SizeY - startY - variableIndexRangeFilter.MinIndex; } continue; } } } //create a generic MDA of [xSize,ySize] with values of dataset. T[] values; if (scale) { values = GdalHelper.GetValuesForBand <T>(gdalDataset, rasterBandIndex, startX, startY, sizeX, sizeY, widthX, widthY); } else { values = GdalHelper.GetValuesForBand <T>(gdalDataset, rasterBandIndex, startX, startY, widthX, widthY); } IMultiDimensionalArray <T> array = (MultiDimensionalArray <T>)TypeUtils.CreateGeneric( typeof(MultiDimensionalArray <>), typeof(T), true, true, Grid.Components[componentIndex]. DefaultValue, values, new[] { widthX, widthY } ); ((MultiDimensionalArray <T>)array).Owner = Grid.Components[componentIndex]; return(array); }