public System.Double ConvertPixelsToMapUnits(ESRI.ArcGIS.Carto.IActiveView activeView, System.Int32 pixelUnits)
{
if(activeView == null)
{
return -1;
}
//Get the ScreenDisplay
ESRI.ArcGIS.Display.IScreenDisplay screenDisplay = activeView.ScreenDisplay;
//Get the DisplayTransformation
ESRI.ArcGIS.Display.IDisplayTransformation displayTransformation = screenDisplay.DisplayTransformation;
//Get the device frame which will give us the number of pixels in the X direction
ESRI.ArcGIS.Display.tagRECT deviceRECT = displayTransformation.get_DeviceFrame();
System.Int32 pixelExtent = (deviceRECT.right - deviceRECT.left);
//Get the map extent of the currently visible area
ESRI.ArcGIS.Geometry.IEnvelope envelope = displayTransformation.VisibleBounds;
System.Double realWorldDisplayExtent = envelope.Width;
//Calculate the size of one pixel
if(pixelExtent == 0)
{
return -1;
}
System.Double sizeOfOnePixel = (realWorldDisplayExtent / pixelExtent);
//Multiply this by the input argument to get the result
return (pixelUnits * sizeOfOnePixel);
}
转载自:ms-help://MS.VSCC.v90/MS.VSIPCC.v90/ESRI.EDNv9.3/Snippets/html/cabbae3d-ccaf-40cb-9bb6-b4fc44fb125e.htm