public static void ExportImage(MapData mapData, string filename) { long highestAltitude = mapData.Altitudes.Max(); byte[] pixelBuffer = new byte[mapData.Width*mapData.Height*3]; for (long i = 0; i < pixelBuffer.Length; i += 3) { long altitudeIdx = i/3; double normalisedAltitude = Math.Min(Math.Max(mapData.Altitudes[altitudeIdx]/(double) highestAltitude, 0f), 1f); var pixel = CalculateColour(normalisedAltitude); pixelBuffer[i + 0] = pixel.B; pixelBuffer[i + 1] = pixel.G; pixelBuffer[i + 2] = pixel.R; } GCHandle pixelBufferHandle = GCHandle.Alloc(pixelBuffer, GCHandleType.Pinned); using ( Image image = new Bitmap((int) mapData.Width, (int) mapData.Height, (int) (mapData.Width*3), PixelFormat.Format24bppRgb, pixelBufferHandle.AddrOfPinnedObject())) { var imageName = filename + ".png"; image.Save(imageName); } pixelBufferHandle.Free(); }
public static bool TryParse(StreamReader streamReader, out MapData mapData) { try { mapData = Parse(streamReader); return true; } catch (IOException e) { Console.WriteLine($"Error occurred reading file: '{e.Message}'"); } catch (ParseException e) { Console.WriteLine($"Parse error: '{e.Message}'"); } mapData = null; return false; }
public static bool TryParseFile(string filename, out MapData mapData) { try { using (var fileStream = File.OpenText(filename)) { return MapReader.TryParse(fileStream, out mapData); } } catch (IOException e) { Console.WriteLine($"Failed to open map file '{filename}': '{e.Message}"); } mapData = null; return false; }