private async void DrawPokemonsHeatMap(CancellationToken token) { await Dispatcher.BeginInvoke(new ThreadStart(delegate { foreach (var p in _pokemons.Values) { RouteCreatorMap.Markers.Remove(p); } })); _pokemons.Clear(); var pokeList = _mappedPokemons.ToList(); var heatMapMarkers = await HeatMapHelper.GuildPokemonSeenHeatMap(pokeList, _globalSettings.HeatMapClusterRadius, Dispatcher, token); if (heatMapMarkers == null) { return; } await Dispatcher.BeginInvoke(new ThreadStart(delegate { foreach (var marker in heatMapMarkers) { if (_pokemons.ContainsKey(marker.Key)) { continue; } _pokemons.Add(marker.Key, marker.Value); RouteCreatorMap.Markers.Add(marker.Value); } })); }
private void RoutesListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var lb = sender as ListBox; if (lb == null || lb.SelectedIndex < 0) { return; } var selectedRoute = lb.SelectedItem as BotRoute; if (selectedRoute == null) { return; } ClearRouteBuilder(); var start = true; foreach (var wp in selectedRoute.InitialWp) { CreateNewMarker(new PointLatLng(wp.Latitude, wp.Longitude), start); if (start) { start = false; } } double dist; var mid = HeatMapHelper.GetMidPointAndRadius( selectedRoute.InitialWp.Select(x => new PointLatLng(x.Latitude, x.Longitude)), out dist); RunDataTasks(mid, dist); RouteCreatorMap.ZoomAndCenterMarkers(null); }
private void Render() { try { if (_isLoaded && _map != null) { var locationsStr = Locations?.Positions.Select(c => { Windows.Foundation.Point p; _map.GetOffsetFromLocation(new Geopoint(c), out p); return(p); }) .Select(l => $"{l.X},{l.Y}") .Aggregate((x, y) => $"{x}|{y}"); var zoom = _formsMap.GetZoomLevel(); var renderParameters = HeatMapHelper.GetRenderParameters(locationsStr, _radius, _minRadius, zoom + 2); string[] args = { renderParameters.Locations, renderParameters.Radius, renderParameters.Zoom }; InvokeJS("Render", args); } } catch { } }
private void Render() { var locationsStr = Locations?.Select(c => LatLngToPoint(c, _map)) .Select(l => $"{l.X},{l.Y}") .Aggregate((x, y) => $"{x}|{y}"); var zoom = _formsMap.GetZoomLevel(); var renderParameters = HeatMapHelper.GetRenderParameters(locationsStr, _radius, _minRadius, zoom + 3); _baseWebView.EvaluateJavascript($"Render('{renderParameters.Locations}', '{renderParameters.Radius}', '{renderParameters.Zoom}');", null); }
private void SetOptions() { if (_baseWebView == null) { return; } var options = HeatMapHelper.GetOptionsJson(_intensity); ExecuteScript($"SetOptions(\"{options}\", 'true');"); }
private void Render() { if (_baseWebView == null) { return; } var locationsStr = Locations?.Select(c => GetCoordinateProjection(c, _map)) .Select(l => $"{l.X},{l.Y}") .Aggregate((x, y) => $"{x}|{y}"); var zoom = _formsMap.GetZoomLevel(); var renderParameters = HeatMapHelper.GetRenderParameters(locationsStr, _radius, _minRadius, zoom + 2); ExecuteScript($"Render('{renderParameters.Locations}', '{renderParameters.Radius}', '{renderParameters.Zoom}');"); }
public void DidReceiveScriptMessage(WKUserContentController userContentController, WKScriptMessage message) { try { var data = message.Body.ToString(); var imageBytes = HeatMapHelper.GetHeatMapImageBytes(data); NSData imageData = NSData.FromArray(imageBytes); UIImage image = UIImage.LoadFromData(imageData); _img.Image = image; _img.Hidden = false; } catch (System.Exception e) { System.Diagnostics.Debug.WriteLine($"Error decoding heat map image: {e}"); } }
public void HeatMapRenderCallback(string base64img) { var activity = Xamarin.Forms.Forms.Context as Activity; activity?.RunOnUiThread(async() => { try { var imageBytes = HeatMapHelper.GetHeatMapImageBytes(base64img); Bitmap decodedByte = await BitmapFactory.DecodeByteArrayAsync(imageBytes, 0, imageBytes.Length); _img.SetImageBitmap(decodedByte); _img.Visibility = Android.Views.ViewStates.Visible; } catch (System.Exception e) { System.Diagnostics.Debug.WriteLine($"Error decoding heat map image: {e}"); } }); }
private async void BaseWebViewScriptNotify(object sender, NotifyEventArgs e) { try { var bmp = new BitmapImage(); var imageBytes = HeatMapHelper.GetHeatMapImageBytes(e.Value); using (var ms = new Windows.Storage.Streams.InMemoryRandomAccessStream()) { using (var writer = new Windows.Storage.Streams.DataWriter(ms.GetOutputStreamAt(0))) { writer.WriteBytes(imageBytes); await writer.StoreAsync(); } await bmp.SetSourceAsync(ms); } imageBytes = null; _img.Source = bmp; _img.Visibility = Windows.UI.Xaml.Visibility.Visible; } catch { } }
private void SetOptions() { var options = HeatMapHelper.GetOptionsJson(_intensity); _baseWebView.EvaluateJavascript($"SetOptions(\"{options}\", 'true');", null); }
private void LoadHeatMap() { var options = HeatMapHelper.GetOptionsJson(_intensity); _baseWebView.EvaluateJavascript($"LoadHeatMap(\"{options}\");", null); }
private static void Main(string[] args) { foreach (var slideName in Util.GetSlideFilenames(args)) { using (var slideCache = new SlideCache(slideName)){ var scale = 0.5f; var tileSize = 500; var slidePartitionerFileName = slideCache.DataPath + "BudDetection.Buds.xml"; var slidePartitioner = File.Exists(slidePartitionerFileName)?SlidePartitioner <int?> .Load(slidePartitionerFileName):new SlidePartitioner <int?>(slideCache.Slide, scale, new Size(tileSize, tileSize)); var heatMapHelper = new HeatMapHelper(slideCache.GetImage("tissueHeatMap")); var budCountRange = new Range <int>(); foreach (var tile in slidePartitioner.Values) { if (tile.Data.HasValue) { Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ":" + tile.Data.Value + " skipped"); budCountRange.Add(tile.Data.Value); continue; } var colors = heatMapHelper.GetAffectedColors(slideCache.Slide.Size, tile.SourceArea); var values = heatMapHelper.GetAffectedValues(slideCache.Slide.Size, tile.SourceArea); if (values.All(v => 0 != v)) { Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ": no tissue"); continue; } using (var tileImage = slideCache.Slide.GetImagePart(tile)){ if (false) { var tileCache = slideCache.GetTileCache(tile.Index); tileCache.SetImage("rgb", tileImage); //speichert unter C:\ProgramData\processingRepository\[slideCache.SlideName]\[Index]\... ansonsten tileImage.Save("[uri].png") } var r = BudDetection.Detector.Execute(tileImage); //var r = ColorDeconvolution.Detect(tileImage); var layer = r.Value; tile.Data = layer.Objects.Count; budCountRange.Add(layer.Objects.Count); foreach (var io in layer.Objects) { //var bb=io.Contour.FindBoundingBox(); var offset = tile.SourceArea.Location; var sourcePoints = new List <Point>(); foreach (var contourPoint in io.Contour.GetPoints()) { double x = Math.Round(contourPoint.X / scale + offset.X); double y = Math.Round(contourPoint.Y / scale + offset.Y); var sourcePoint = new Point((int)x, (int)y); sourcePoints.Add(sourcePoint); } var annotation = slideCache.Slide.CreateAnnotation(AnnotationType.PolygonLine); foreach (var point in sourcePoints) { annotation.AppendPoints(point); } annotation.Color = Color.OrangeRed; annotation.Name = null == io.Class?"bud":io.Class.Name; } } Console.WriteLine(slideCache.SlideName + "-" + tile.Index + " done"); if (Console.KeyAvailable) { break; } } slidePartitioner.Save(slidePartitionerFileName); using (var heatMap = slidePartitioner.GenerateHeatMap(b => { if (!b.HasValue) { return(Color.LightSeaGreen); } var c = (int)Math.Round(budCountRange.Normalize(b.Value) * 255d); return(Color.FromArgb(c, c, c)); })) slideCache.SetImage("budHeatMap", heatMap); } } }
private void SetOptions() { var options = HeatMapHelper.GetOptionsJson(_intensity); InvokeJS("SetOptions", new string[] { options, "true" }); }
private void LoadHeatMap() { var options = HeatMapHelper.GetOptionsJson(_intensity); InvokeJS("LoadHeatMap", new string[] { options }); }
private static void Main(string[] args) { foreach (var slideName in Util.GetSlideFilenames(args)) { using (var slideCache = new SlideCache(slideName)){ // var scale = 0.1f; var scale = 0.5f; // besser so laut 19.07.2018 var tileSize = 100; var slidePartitionerFileName = slideCache.DataPath + "BudDetection.Buds.xml"; var slidePartitioner = File.Exists(slidePartitionerFileName)?SlidePartitioner <int?> .Load(slidePartitionerFileName):new SlidePartitioner <int?>(slideCache.Slide, scale, new Size(tileSize, tileSize)); var heatMapHelper = new HeatMapHelper(slideCache.GetImage("tissueHeatMap")); var budCountRange = new Range <int>(); var counter = 0; foreach (var tile in slidePartitioner.Values) { // test, ob schon was für die kackel berechnet wurde if (tile.Data.HasValue) { Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ":" + tile.Data.Value + " skipped"); budCountRange.Add(tile.Data.Value); continue; } // soll kachel bearbeitet werden var colors = heatMapHelper.GetAffectedColors(slideCache.Slide.Size, tile.SourceArea); var values = heatMapHelper.GetAffectedValues(slideCache.Slide.Size, tile.SourceArea); if (values.All(v => 255 == v)) // 255 weiß { Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ": no tissue"); continue; } using (var tileImage = slideCache.Slide.GetImagePart(tile)){ counter = counter + 1; if (false) { var tileCache = slideCache.GetTileCache(tile.Index); tileCache.SetImage("rgb", tileImage); //speichert unter C:\ProgramData\processingRepository\[slideCache.SlideName]\[Index]\... ansonsten tileImage.Save("[uri].png") } var r = BudDetection.Detector.Execute(tileImage); // importent call var layer = r.Value; tile.Data = layer.Objects.Count; budCountRange.Add(layer.Objects.Count); // für alle gefundene objekte wird eine annotation angelegt foreach (var io in layer.Objects) { //var bb=io.Contour.FindBoundingBox(); var offset = tile.SourceArea.Location; var sourcePoints = new List <Point>(); foreach (var contourPoint in io.Contour.GetPoints()) { double x = Math.Round(contourPoint.X / scale + offset.X); double y = Math.Round(contourPoint.Y / scale + offset.Y); var sourcePoint = new Point((int)x, (int)y); sourcePoints.Add(sourcePoint); } var annotation = slideCache.Slide.CreateAnnotation(AnnotationType.PolygonLine); foreach (var point in sourcePoints) { annotation.AppendPoints(point); } annotation.Color = Color.PaleVioletRed; annotation.Name = null == io.Class?"bud":io.Class.Name; } } if (counter % 100 == 0) { Console.WriteLine(slideCache.SlideName + "-" + tile.Index + " done"); } if (Console.KeyAvailable) { break; } } slidePartitioner.Save(slidePartitionerFileName); // normalisierung using (var heatMap = slidePartitioner.GenerateHeatMap(b => { if (!b.HasValue) { return(Color.LightSeaGreen); } var c = (int)Math.Round(budCountRange.Normalize(b.Value) * 255d); return(Color.FromArgb(c, c, c)); // grauwert(hell == viele butts) })) slideCache.SetImage("budHeatMap", heatMap); } } }