wcfsilverlightmultiscaleimage

MultiScaleImageSource GetTileLayers Explanation


I have been doing reading on MultiScaleImage source, and finding anything useful has proven to be quite difficult, thus I turn to the experts here. The specific knowledge I would like to have pertains to the GetTileLayers method. I know this method is used to get the image tiles. But I have no idea where this method is called from, or where the parameters come from or how I would use it if I subclassed the MultiScaleTileSource Class. Any insight into this method or the MSI model would be amazing but I have 3 main questions:

1. Where should/is the method GetTileLayers called from?
2. How should I change this method if I wanted to draw png's from a non-local URI?
3. Where can I find some reading to help with this?


Solution

  • In order to create a custom tile source, you would subclass MultiScaleTileSource and override the GetTileLayers method, as shown in the example below, which defines an image consisting of 1000*1000 tiles of size 256x256 pixels each.

    public class MyTileSource : MultiScaleTileSource
    {
        public MyTileSource()
            : base(1000 * 256, 1000 * 256, 256, 256, 0)
        {
        }
    
        protected override void GetTileLayers(
            int tileLevel, int tilePositionX, int tilePositionY,
            IList<object> tileImageLayerSources)
        {
            // create an appropriate URI for tileLevel, tilePositionX and tilePositionY
            // and add it to the tileImageLayerSources collection
    
            var uri = new Uri(...);
            tileImageLayerSources.Add(uri);
        }
    }
    

    Now you would assign an instance of your MyTileSource class to your MultiScaleImage control:

    MultiScaleImage msImage = ...
    msImage.Source = new MyTileSource();