He encontrado el siguiente código para convertir ISymbol en imagen de mapa de bits, pero ¿cómo saber el tamaño de imagen adecuado? (supongamos que tenemos un ITextSymbol)
private static Image PointSymbolToImage(ISymbol symbol, Size imageSize)
{
double x = imageSize.Width / 2;
double y = (imageSize.Height - 1) / 2;
IPoint point = new PointClass();
point.PutCoords(x, y);
Bitmap bmp = new Bitmap(imageSize.Width, imageSize.Height);
Graphics g = Graphics.FromImage(bmp);
symbol.SetupDC(g.GetHdc().ToInt32(), null);
try { symbol.Draw(point); }
catch { }
symbol.ResetDC();
g.Dispose();
return (Image)bmp;
}
Para más detalles:
Utilicé QueryBoundary pero las dimensiones devueltas después de la transformación a coordenadas de pantalla eran erróneas. El siguiente es mi código:
Aquí symbol es ITextSymbol y (x, y) son las coordenadas lat, lon del símbolo.
IPolygon boundary = new PolygonClass();
boundary.SetEmpty();
IDisplay screenDisplay = axMapControl1.ActiveView.ScreenDisplay as IDisplay;
IDisplayTransformation displayTransformation = screenDisplay.DisplayTransformation;
IPoint point = new PointClass();
point.PutCoords(x, y);
symbol.QueryBoundary(screenDisplay.hDC, displayTransformation, point, boundary);
IPoint mapPoint = new PointClass();
int minX, minY;
mapPoint.PutCoords(boundary.Envelope.XMin, boundary.Envelope.YMin);
displayTransformation.FromMapPoint(mapPoint, out minX, out minY);
int maxX, maxY;
mapPoint.PutCoords(boundary.Envelope.XMax, boundary.Envelope.YMax);
displayTransformation.FromMapPoint(mapPoint, out maxX, out maxY);
0 votos
Quizás puedas encontrar algo útil en mis comentarios a esta pregunta relacionada: Crear una tabla resumen de la simbología de todos los conjuntos de datos en múltiples mxd's