I have the following code opening up the mosaic dataset which appears to work just fine. However, I have no idea how to access the rasters contained within the dataset. All I really care about doing is making a PixelBlock from the raster(s) so that I can read the pixel values. There are loads of example of how to create a mosaic dataset from individual rasters, but I cannot find a single one that talks about how to read rasters from a mosaic dataset.
IRasterDataset makes this somewhat simple using CreateDefaultRaster(), but I've found no such path to getting at the raster data within a mosaic dataset.
IMosaicWorkspaceExtensionHelperPtr <SPAN class="token function">mosaic_ext_helper</SPAN><SPAN class="punctuation token">(</SPAN>CLSID_MosaicWorkspaceExtensionHelper<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IMosaicWorkspaceExtensionPtr mosaic_ext<SPAN class="punctuation token">;</SPAN>
mosaic_ext_helper<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">FindExtension</SPAN><SPAN class="punctuation token">(</SPAN>_workspace<SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">&</SPAN>mosaic_ext<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IMosaicDatasetPtr mosaic_dataset<SPAN class="punctuation token">;</SPAN>
mosaic_ext<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">OpenMosaicDataset</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="token function">_bstr_t</SPAN><SPAN class="punctuation token">(</SPAN>ds_name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">c_str</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">&</SPAN>mosaic_dataset<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// Somehow(???) get the rasters (or their pixel data) from mosaic_dataset</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
[SOLUTION]
This is what I came up with as a solution. It may not be ideal, but it works to get at the pixels in the rasters.
IMosaicWorkspaceExtensionHelperPtr <SPAN class="token function">mosaic_ext_helper</SPAN><SPAN class="punctuation token">(</SPAN>CLSID_MosaicWorkspaceExtensionHelper<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IMosaicWorkspaceExtensionPtr mosaic_ext<SPAN class="punctuation token">;</SPAN>
mosaic_ext_helper<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">FindExtension</SPAN><SPAN class="punctuation token">(</SPAN>_workspace<SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">&</SPAN>mosaic_ext<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IMosaicDatasetPtr mosaic_dataset<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="token function">FAILED</SPAN><SPAN class="punctuation token">(</SPAN>mosaic_ext<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">OpenMosaicDataset</SPAN><SPAN class="punctuation token">(</SPAN>mosaic_dataset_name<SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">&</SPAN>mosaic_dataset<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">// Error here</SPAN>
<SPAN class="punctuation token">}</SPAN>
IFeatureClassPtr feature_class<SPAN class="punctuation token">;</SPAN>
mosaic_dataset<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">get_Catalog</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">&</SPAN>feature_class<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IQueryFilterPtr <SPAN class="token function">query_filter</SPAN><SPAN class="punctuation token">(</SPAN>CLSID_QueryFilter<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IFeatureCursorPtr feature_cursor<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="token function">FAILED</SPAN><SPAN class="punctuation token">(</SPAN>feature_class<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">Search</SPAN><SPAN class="punctuation token">(</SPAN>query_filter<SPAN class="punctuation token">,</SPAN> VARIANT_FALSE<SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">&</SPAN>feature_cursor<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">// Error here</SPAN>
<SPAN class="punctuation token">}</SPAN>
IFeaturePtr feature<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">while</SPAN> <SPAN class="punctuation token">(</SPAN>feature_cursor<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">NextFeature</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">&</SPAN>feature<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> S_OK<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
esriFeatureType type<SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">// Returns esriFTRasterCatalogItem</SPAN>
feature<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">get_FeatureType</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">&</SPAN>type<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IRasterCatalogItemPtr <SPAN class="token function">catalog_item</SPAN><SPAN class="punctuation token">(</SPAN>feature<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IRasterDatasetPtr raster_dataset<SPAN class="punctuation token">;</SPAN>
catalog_item<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">get_RasterDataset</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">&</SPAN>raster_dataset<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IRasterPtr raster<SPAN class="punctuation token">;</SPAN>
raster_dataset<SPAN class="operator token">-</SPAN><SPAN class="operator token">></SPAN><SPAN class="token function">CreateDefaultRaster</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">&</SPAN>raster<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// Do something with the each Raster or RasterDataset</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>