protected override void GetSource( Envelope extent, int width, int height, DynamicLayer.OnImageComplete onComplete ) { //List<MapPoint> mapPoints = new List<MapPoint>(); //List<Point> points = new List<Point>(); //int count = 0; //while( count < 1000 ) //{ // mapPoints.Add(new MapPoint(extent.XMin + (extent.Width * (_random.Next(100)/100.00)), // extent.YMin + (extent.Height * (_random.Next(100)/100.00)), // extent.SpatialReference)); // count++; //} //foreach( MapPoint entry in mapPoints ) //{ // double M11 = ( double ) width / 360.00; // double M22 = -( double ) height / 180.00; // double M12 = 0.00; // double M21 = 0.00; // double offsetX = 180.00 * ( ( double ) width / 360.00 ); // double offsetY = 90.00 * ( ( double ) height / 180.0 ); // Matrix transform = new Matrix( M11, M12, M21, M22, offsetX, offsetY ); // points.Add( transform.Transform( new Point( entry.X, entry.Y ) ) ); //} if( _timer != null ) _timer.Dispose(); _currentWidth = width; _currentHeight = height; _pngRenderer = new RainDropPngRenderer( _currentWidth, _currentHeight ); ParameterizedThreadStart starter = new ParameterizedThreadStart( ( pngRenderer ) => { Stream imageStream = InitalizeImage( pngRenderer as RainDropPngRenderer ); Dispatcher.BeginInvoke( () => { _image = new BitmapImage(); _image.SetSource( imageStream ); onComplete( _image, width, height, extent ); _timer = new Timer( timer_Tick, _pngRenderer, new TimeSpan( 0, 0, 0 ), TimeSpan.FromMilliseconds( RippleIntervalMilliSeconds ) ); } ); } ); new Thread( starter ).Start( _pngRenderer ); }
private Stream InitalizeImage( RainDropPngRenderer pngRenderer ) { pngRenderer.Display( Background ); return pngRenderer.GetImageStream(); }