Tengo un georreferenciados IRasterLayer que muestra datos de una PPM de archivo sin canal alfa. Estoy tratando de especificar un color que deben ser tratados como transparente. En ArcMap, es posible establecer un color específico a ser transparentes, pero todavía tengo que encontrar un trabajo ejemplo de C++ para ArcObjects 10.x .NET.
Estoy usando el C++ interfaz COM y han estado tratando de lograr esto mediante la creación de un RasterRGBRenderer como por este post. La reivindica-trabajo VB.NET la muestra pasa una matriz de dobles en IRasterStretch.BackgroundValues que no es compatible con el documentado 10.1 de la interfaz.
Por desgracia, la documentación en esta área es pobre, y estas muestras son muy viejos. La documentación no especifica qué tipo de VARIANTE COM es necesaria cuando las VARIANTES que se espera.
Por favor, asesorar sobre cómo especificar la transparencia de fondo, el uso de C++ en ArcObjects 10.x .NET
Editar:
Como una prueba de que he intentado establecer BackgroundValue blanco para mostrar como el rojo en la siguiente, este trabajo no lo hizo (Esto no funciona en una prueba PNG con fondo blanco, pero no es mi PPM archivo):
esri::IRasterRGBRenderer2Ptr rgbRenderer;
rgbRenderer.CreateInstance(__uuidof(esri::RasterRGBRenderer));
IRasterRendererPtr rasterRenderer(rgbRenderer);
rasterRenderer->Raster = rasterLayer->Raster;
hr = rasterLayer->putref_Renderer(rasterRenderer);
IRgbColorPtr backgroundColor;
backgroundColor.CreateInstance(__uuidof(esri::RgbColor));
backgroundColor->put_RGB(RGB(255, 0, 0)); // Bright red for testing
CComSafeArray<double> backgroundValue;
backgroundValue.Create(3);
backgroundValue.SetAt(0, 255.0);
backgroundValue.SetAt(1, 255.0);
backgroundValue.SetAt(2, 255.0);
CComVariant varBackgroundValue(backgroundValue);
IRasterStretch2Ptr stretch(rasterRenderer);
hr = stretch->put_Background(VARIANT_TRUE);
hr = stretch->putref_BackgroundColor(backgroundColor);
hr = stretch->put_BackgroundValue(varBackgroundValue);
rasterRenderer->Update();
Puedo confirmar que BackgroundValue se está establecida correctamente. Llamar get_BackgroundValue siempre devuelve una matriz VARIANTE de dobles y estos incluyen los valores correctos si me llega después de que me llame a poner. El procesador también es confirmado para ser configurado correctamente como si me desactivar una de las bandas utilizando el procesador puntero que es claramente visible