Within ArcObjects for ArcGIS 10.1, we are attempting to render pre-generated map tiles as a
basemap (group) layer. The tiles themselves are of the typical web mercator aux. spherical tiling scheme.
Under ArcMap 10.1 the tiles do not render properly:
and the ArcMap 10.1 UI is displaying the following drawing error: "Missing raster band wavelength properties"
[Expected] rendering result under ArcMap 10.0:
While this is related to Can custom map tiles be consumed via ArcObjects within my ArcGIS 10 Desktop AddIn? that was a holistic approach question. Here I am specifically asking how to properly render the tiles in ArcMap 10.1.
We successfully accomplished the layer adding/rendering within 10.0 via the following code:
_tileLayer = new MyCustomTileLayer(); // implements ILayer among others..
_coverageBasemapLayer = new BasemapLayerClass();
_coverageGroupLayer = _coverageBasemapLayer as IGroupLayer;
// add the layer to the map
IMap map = ArcMap.Document.FocusMap;
map.AddLayer((ILayer)_coverageBasemapLayer);
...
// wire the AfterDraw Event
IActiveViewEvents_Event avEvent = ArcMap.Document.FocusMap as IActiveViewEvents_Event;
avEvent.AfterDraw += new IActiveViewEvents_AfterDrawEventHandler(avEvent_AfterDraw);
private void avEvent_AfterDraw(IDisplay Display, esriViewDrawPhase phase) {
// force re-draw
_tileLayer.Draw(esriDrawPhase.esriDPGeography, Display, null);
}
...
// effectively, within _tileLayer.Draw() here...
IRasterLayer rl = new RasterLayerClass();
// 'file' is the full path to the map tile PNG on the local file system, downloaded
// and/or cached
rl.CreateFromFilePath(file);
_coverageGroupLayer.Add(rl);
Presumably many things have changed within the renderer for 10.1.
However can anyone provide insight into the ArcObjects changes required?
Specifically, how can we [properly] accomplish this within ArcObjects under 10.1?
Best Answer
In 10.1 the StretchType for rasters seems to have changed from esriRasterStretch_NONE to "Percent Clip" giving color problems with 24 and 32 bits tiles.
I have resolved it with the following code: