首先总结一下之前写的几篇符号化文章,列表如下:

AE+VS开发颜色符号系统之单一值符号(一)

AE+VS开发颜色符号系统之唯一值符号(二)

AE+VS开发颜色符号系统之分类符号(三)

AE+VS开发颜色符号系统之分级符号符号化(四)

AE+VS+c#开发颜色符号系统之分级色彩符号化(五)

AE+VS+c#开发颜色符号系统之依比例符号化(六)

和之前的操作一样,直接贴几段代码:

DotDensitySymbolsCmd.cs

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Controls;namespace Visualization
{/// <summary>/// Command that works in ArcMap/Map/PageLayout/// </summary>[Guid("0109a9dd-69dd-437f-9104-42ef4177cd95")][ClassInterface(ClassInterfaceType.None)][ProgId("Visualization.DotDensitySymbolsCmd")]public sealed class DotDensitySymbolsCmd : BaseCommand{#region COM Registration Function(s)[ComRegisterFunction()][ComVisible(false)]static void RegisterFunction(Type registerType){// Required for ArcGIS Component Category Registrar supportArcGISCategoryRegistration(registerType);//// TODO: Add any COM registration code here//}[ComUnregisterFunction()][ComVisible(false)]static void UnregisterFunction(Type registerType){// Required for ArcGIS Component Category Registrar supportArcGISCategoryUnregistration(registerType);//// TODO: Add any COM unregistration code here//}#region ArcGIS Component Category Registrar generated code/// <summary>/// Required method for ArcGIS Component Category registration -/// Do not modify the contents of this method with the code editor./// </summary>private static void ArcGISCategoryRegistration(Type registerType){string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);MxCommands.Register(regKey);ControlsCommands.Register(regKey);}/// <summary>/// Required method for ArcGIS Component Category unregistration -/// Do not modify the contents of this method with the code editor./// </summary>private static void ArcGISCategoryUnregistration(Type registerType){string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);MxCommands.Unregister(regKey);ControlsCommands.Unregister(regKey);}#endregion#endregionprivate IHookHelper m_hookHelper = null;public DotDensitySymbolsCmd(){base.m_category = "Visualization";base.m_caption = "点值符号化";base.m_message = "点值符号化";base.m_toolTip = "点值符号化";base.m_name = "DotDensitySymbolsCmd";   try{string bitmapResourceName = GetType().Name + ".bmp";base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);}catch (Exception ex){System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");}}#region Overridden Class Methods/// <summary>/// Occurs when this command is created/// </summary>/// <param name="hook">Instance of the application</param>public override void OnCreate(object hook){if (hook == null)return;try{m_hookHelper = new HookHelperClass();m_hookHelper.Hook = hook;if (m_hookHelper.ActiveView == null)m_hookHelper = null;}catch{m_hookHelper = null;}if (m_hookHelper == null)base.m_enabled = false;elsebase.m_enabled = true;// TODO:  Add other initialization code}/// <summary>/// Occurs when this command is clicked/// </summary>public override void OnClick(){if (m_hookHelper == null) return;if (m_hookHelper.FocusMap.LayerCount > 0){DotDensitySymbols symbol = new DotDensitySymbols(m_hookHelper);symbol.Show(m_hookHelper as System.Windows.Forms.IWin32Window);}}#endregion}
}

DotDensitySymbols窗体及代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DisplayUI;
using stdole;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Framework;
using System.Runtime.InteropServices;namespace Visualization.空间数据符号化
{public partial class DotDensitySymbols : Form{IHookHelper m_hookHelper = null;IActiveView m_activeView = null;IMap m_map = null;IFeatureLayer layer2Symbolize = null;IMarkerSymbol markerSymbol = null;IColor gColor = null;double dotSize = 2;int dotValue = 2000;System.Collections.Hashtable fieldSymbolHashTable = new System.Collections.Hashtable();public DotDensitySymbols(IHookHelper hookHelper){InitializeComponent();m_hookHelper = hookHelper;m_activeView = m_hookHelper.ActiveView;m_map = m_hookHelper.FocusMap;}private void DotDensitySymbols_Load(object sender, EventArgs e){CbxLayersAddItems();lvRendererFields.View = View.List;}private void cbxLayers2Symbolize_SelectedIndexChanged(object sender, EventArgs e){if (cbxLayers2Symbolize.SelectedItem != null){string strLayer2Symbolize = cbxLayers2Symbolize.SelectedItem.ToString();layer2Symbolize = GetFeatureLayer(strLayer2Symbolize);lstSourceFieldsAdditems(layer2Symbolize);lvRendererFields.Items.Clear();fieldSymbolHashTable.Clear();}}private void lstSourceFieldsAdditems(IFeatureLayer featureLayer){IFields fields = featureLayer.FeatureClass.Fields;lstSourceFields.Items.Clear();for (int i = 0; i < fields.FieldCount; i++){if ((fields.get_Field(i).Type == esriFieldType.esriFieldTypeDouble) ||(fields.get_Field(i).Type == esriFieldType.esriFieldTypeInteger) ||(fields.get_Field(i).Type == esriFieldType.esriFieldTypeSingle) ||(fields.get_Field(i).Type == esriFieldType.esriFieldTypeSmallInteger)){lstSourceFields.Items.Add(fields.get_Field(i).Name);}}}private void CbxLayersAddItems(){if (GetLayers() == null) return;IEnumLayer layers = GetLayers();layers.Reset();ILayer layer = layers.Next();while (layer != null){if (layer is IFeatureLayer){IFeatureLayer featureLayer = layer as IFeatureLayer;if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)cbxLayers2Symbolize.Items.Add(layer.Name);}layer = layers.Next();}}private void btnSymbolize_Click(object sender, EventArgs e){if (layer2Symbolize == null) return;Renderer();}private void Renderer(){IGeoFeatureLayer pGeoFeatureL = (IGeoFeatureLayer)layer2Symbolize;IFeatureClass featureClass = pGeoFeatureL.FeatureClass;IDotDensityRenderer renderer = CreateRenderer();if (renderer == null) return;pGeoFeatureL.Renderer = (IFeatureRenderer)renderer;m_activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, m_activeView.Extent);}private IDotDensityRenderer CreateRenderer(){IDotDensityRenderer pDotDensityRenderer = new DotDensityRendererClass();IRendererFields pRendererFields = (IRendererFields)pDotDensityRenderer;IDotDensityFillSymbol pDotDensityFillS = new DotDensityFillSymbolClass();//pDotDensityFillS.DotSize = 2 * dotSize;//pDotDensityFillS.Color = getRGB(0, 0, 0);if (gColor != null)pDotDensityFillS.BackgroundColor = gColor;ISymbolArray pSymbolArray = (ISymbolArray)pDotDensityFillS;string strField = string.Empty;foreach (System.Collections.DictionaryEntry de in fieldSymbolHashTable){strField = de.Key.ToString(); ;ISymbol symbol = de.Value as ISymbol;pRendererFields.AddField(strField, strField);IMarkerSymbol pMarkerSymbol = symbol as IMarkerSymbol;pMarkerSymbol.Size = dotSize;pSymbolArray.AddSymbol(symbol);}pDotDensityRenderer.DotDensitySymbol = pDotDensityFillS;pDotDensityRenderer.DotValue = dotValue;pDotDensityRenderer.CreateLegend();return pDotDensityRenderer;}private void btnClose_Click(object sender, EventArgs e){this.Close();}#region "GetLayers"private IEnumLayer GetLayers(){UID uid = new UIDClass();uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";// IFeatureLayer//uid.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}";  // IGeoFeatureLayer//uid.Value = "{6CA416B1-E160-11D2-9F4E-00C04F6BC78E}";  // IDataLayerif (m_map.LayerCount != 0){IEnumLayer layers = m_map.get_Layers(uid, true);return layers;}return null;}#endregion#region "GetFeatureLayer"private IFeatureLayer GetFeatureLayer(string layerName){//get the layers from the mapsif (GetLayers() == null) return null;IEnumLayer layers = GetLayers();layers.Reset();ILayer layer = null;while ((layer = layers.Next()) != null){if (layer.Name == layerName)return layer as IFeatureLayer;}return null;}#endregionprivate void btnSelectBackColor_Click(object sender, EventArgs e){gColor = GetColorByColorPalette(btnSelectBackColor.Right, btnSelectBackColor.Bottom);}public IRgbColor getRGB(int yourRed, int yourGreen, int yourBlue){IRgbColor pRGB;pRGB = new RgbColorClass();pRGB.Red = yourRed;pRGB.Green = yourGreen;pRGB.Blue = yourBlue;pRGB.UseWindowsDithering = true;return pRGB;}private IColor GetColorByColorBrowser(){IColor pNewColor;IColor pInitColor = new RgbColorClass();pInitColor.RGB = 255;IColorBrowser pColorBrowser = new ColorBrowserClass();pColorBrowser.Color = pInitColor;bool bColorSet = pColorBrowser.DoModal(0);if (bColorSet){pNewColor = pColorBrowser.Color;return pNewColor;}else return pInitColor;}private IColor GetColorByColorSelector(){//Set the initial color to be diaplyed when the dialog opensIColor pColor;pColor = new RgbColorClass();pColor.RGB = 255;IColorSelector pSelector;pSelector = new ColorSelectorClass();pSelector.Color = pColor;// Display the dialogif (pSelector.DoModal(0)){IColor pOutColor;pOutColor = pSelector.Color;return pOutColor;}else return pColor;}private IColor GetColorByColorPalette(int left, int top){IColor pColor;pColor = new RgbColorClass();pColor.RGB = 255;try{IColorPalette pPalette;pPalette = new ColorPaletteClass();tagRECT pRect = new tagRECT();pRect.left = left;pRect.top = top;pPalette.TrackPopupMenu(ref pRect, pColor, false, 0);pColor = pPalette.Color;return pColor;}catch (Exception ex){MessageBox.Show(ex.Message);return pColor;}}private void btnSelectSymbol_Click(object sender, EventArgs e){ISymbol symbol = GetSymbolBySymbolSelector(esriGeometryType.esriGeometryPoint);if (symbol != null)markerSymbol = symbol as IMarkerSymbol;}private ISymbol GetSymbolBySymbolSelector(esriGeometryType geometryType){try{ISymbolSelector pSymbolSelector = new SymbolSelectorClass();ISymbol symbol = null;switch (geometryType){case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:symbol = new SimpleMarkerSymbolClass();break;case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:symbol = new SimpleLineSymbolClass();break;case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:symbol = new SimpleFillSymbolClass();break;default:break;}pSymbolSelector.AddSymbol(symbol);bool response = pSymbolSelector.SelectSymbol(0);if (response){symbol = pSymbolSelector.GetSymbolAt(0);return symbol;}return null;}catch (Exception ex){MessageBox.Show(ex.Message);ISymbol symbol = null;switch (geometryType){case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:symbol = new SimpleMarkerSymbolClass();break;case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:symbol = new SimpleLineSymbolClass();break;case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:symbol = new SimpleFillSymbolClass();break;default:break;}return symbol;}}private void nudDotSize_ValueChanged(object sender, EventArgs e){dotSize = Convert.ToDouble(nudDotSize.Value);}private void txtDotValue_TextChanged(object sender, EventArgs e){if (IsInteger(txtDotValue.Text))dotValue = Convert.ToInt32(txtDotValue.Text);}private bool IsInteger(string s){try{Int32.Parse(s);}catch{return false;}return true;}private void lstSourceFields_DoubleClick(object sender, EventArgs e){System.Object selectedItem = lstSourceFields.SelectedItem;if (selectedItem != null){lstSourceFields.Items.Remove(selectedItem);lvRendererFieldsAddItemWithSymbol(selectedItem);}}private void lvRendererFieldsAddItemWithSymbol(System.Object selectedItem){IStyleGalleryItem styleItem = GetSymbolBySymbologyControl("Marker Symbols");if (styleItem == null) return;ISymbol symbol = styleItem.Item as ISymbol;if (symbol == null) return;//symbolPBox.Visible = true;IStyleGalleryClass mStyleClass = new MarkerSymbolStyleGalleryClassClass();Bitmap image = StyleGalleryItemToBmp(24, 24, mStyleClass, styleItem);//Bitmap image = DrawToPictureBox(symbol, symbolPBox);int currentIdx = Largeimage.Images.Count;currentIdx = Smallimage.Images.Count;Largeimage.Images.Add(image);Smallimage.Images.Add(image);ListViewItem newItem = new ListViewItem();newItem.ImageIndex = currentIdx;newItem.Text = selectedItem.ToString();lvRendererFields.Items.Add(newItem);lvRendererFields.Refresh();if (fieldSymbolHashTable.ContainsKey(selectedItem.ToString())){fieldSymbolHashTable.Remove(selectedItem.ToString());}fieldSymbolHashTable.Add(selectedItem.ToString(), symbol);//symbolPBox.Visible = false;}private void btnIn_Click(object sender, EventArgs e){System.Object selectedItem = lstSourceFields.SelectedItem;if (selectedItem != null){lstSourceFields.Items.Remove(selectedItem);lvRendererFieldsAddItemWithSymbol(selectedItem);}}private void btnOut_Click(object sender, EventArgs e){ListViewItem selectedItem = lvRendererFields.FocusedItem;if (selectedItem != null){lvRendererFields.Items.Remove(selectedItem);lstSourceFields.Items.Add(selectedItem.Text);fieldSymbolHashTable.Remove(selectedItem.Text);}}private void btnAllOut_Click(object sender, EventArgs e){foreach (ListViewItem item in lvRendererFields.Items){lstSourceFields.Items.Add(item.Text);}lvRendererFields.Items.Clear();fieldSymbolHashTable.Clear();}private IStyleGalleryItem GetSymbolBySymbologyControl(string styleClass){SelectSymbolByControl symbolForm = new SelectSymbolByControl(styleClass);symbolForm.ShowDialog();IStyleGalleryItem styleItem = symbolForm.m_styleGalleryItem;symbolForm.Dispose();return styleItem;}private Bitmap DrawToPictureBox(ISymbol pSym, PictureBox pBox){IPoint pPoint = null;IGeometry pGeometry = null;int hDC;System.Drawing.Graphics pGraphics = null;pGraphics = System.Drawing.Graphics.FromHwnd(pBox.Handle);//clear drawing canvaspGraphics.FillRectangle(System.Drawing.Brushes.White, pBox.ClientRectangle);if (pSym is IMarkerSymbol){pPoint = new PointClass();      //the geometry of a MarkerSymbolpPoint.PutCoords(pBox.Width / 2, pBox.Height / 2);       //center in middle of pBoxpGeometry = pPoint;}if (pSym is ILineSymbol){ISegmentCollection polyline = new ESRI.ArcGIS.Geometry.PolylineClass();ISegment line = new ESRI.ArcGIS.Geometry.LineClass();IPoint fromPoint = new PointClass();fromPoint.PutCoords(pBox.Left, pBox.Bottom);IPoint toPoint = new PointClass();toPoint.PutCoords(pBox.Right, pBox.Top);line.FromPoint = fromPoint;line.ToPoint = toPoint;object missing = Type.Missing;polyline.AddSegment(line, ref missing, ref missing);pGeometry = polyline as IGeometry;}if (pSym is IFillSymbol){IEnvelope pEnvelope = new EnvelopeClass();pEnvelope.PutCoords(pBox.Left, pBox.Top, pBox.Right, pBox.Bottom);pGeometry = pEnvelope;}hDC = GetDC(pBox.Handle.ToInt32());pSym.SetupDC(hDC, null);pSym.ROP2 = esriRasterOpCode.esriROPCopyPen;pSym.Draw(pGeometry);pSym.ResetDC();Bitmap image = new Bitmap(pBox.Width, pBox.Height, pGraphics);Graphics g2 = Graphics.FromImage(image);//获得屏幕的句柄 IntPtr dc3 = pGraphics.GetHdc();//获得位图的句柄 IntPtr dc2 = g2.GetHdc();BitBlt(dc2, 0, 0, pBox.Width, pBox.Height, dc3, 0, 0, SRCCOPY);pGraphics.ReleaseHdc(dc3);//释放屏幕句柄             g2.ReleaseHdc(dc2);//释放位图句柄             //image.Save("c:\\MyJpeg.Icon", ImageFormat.Bmp);return image;}private void DrawToTarget(ISymbol pSym, PictureBox pBox){IPoint pPoint = null;IGeometry pGeometry = null;IDisplayTransformation pDisplayTrans = null;if (pSym is IMarkerSymbol){pPoint = new PointClass();      //the geometry of a MarkerSymbolpPoint.PutCoords(pBox.Width / 2, pBox.Height / 2);       //center in middle of pBoxpGeometry = pPoint;}if (pSym is ILineSymbol){ISegmentCollection polyline = new ESRI.ArcGIS.Geometry.PolylineClass();ISegment line = new ESRI.ArcGIS.Geometry.LineClass();IPoint fromPoint = new PointClass();fromPoint.PutCoords(pBox.Left, pBox.Bottom);IPoint toPoint = new PointClass();toPoint.PutCoords(pBox.Right, pBox.Top);line.FromPoint = fromPoint;line.ToPoint = toPoint;object missing = Type.Missing;polyline.AddSegment(line, ref missing, ref missing);pGeometry = polyline as IGeometry;}if (pSym is IFillSymbol){IEnvelope pEnvelope = new EnvelopeClass();pEnvelope.PutCoords(pBox.Left, pBox.Top, pBox.Right, pBox.Bottom);pGeometry = pEnvelope;}pDisplayTrans = getTransformation(pBox) as IDisplayTransformation;pSym.SetupDC(pBox.Handle.ToInt32(), null);pSym.ROP2 = esriRasterOpCode.esriROPCopyPen;pSym.Draw(pGeometry);pSym.ResetDC();}private ITransformation getTransformation(PictureBox picTarget){RECT boundsRect;GetWindowRect(picTarget.Handle.ToInt32(), out boundsRect);int lWidth = boundsRect.Right - boundsRect.Left;int lHeight = boundsRect.Bottom - boundsRect.Top;IDisplayTransformation pDispTrans = new DisplayTransformationClass();IEnvelope pBounds = new EnvelopeClass();pBounds.PutCoords(picTarget.Left, picTarget.Top, picTarget.Right, picTarget.Bottom);//pBounds.PutCoords(0, 0, lHeight, lWidth);pDispTrans.VisibleBounds = pBounds;pDispTrans.Bounds = pBounds;tagRECT deviceRect;deviceRect.left = 0;deviceRect.top = 0;deviceRect.right = lWidth;deviceRect.bottom = lHeight;pDispTrans.set_DeviceFrame(ref deviceRect);IntPtr lHDC = picTarget.Handle;int lDpi = GetDeviceCaps(lHDC, LOGPIXELSY);if (lDpi == 0) lDpi = 300;pDispTrans.Resolution = lDpi;return pDispTrans;}private IPictureDisp CreatePictureFromSymbol(int hDCOld, int hBmpNew, ISymbol pSymbol, int lWidth, int lHeight, int lGap){int hDCNew = CreateCompatibleDC(hDCOld);hBmpNew = CreateCompatibleBitmap(hDCOld, 2);int hBmpOld = SelectObject(hDCNew, hBmpNew);// Draw the symbol to the new device context.bool lResult;lResult = DrawToDC(hDCNew, lWidth, lHeight, pSymbol, lGap);hBmpNew = SelectObject(hDCNew, hBmpOld);DeleteDC(hDCNew);// Return the Bitmap as an OLE Picture.return CreatePictureFromBitmap(hBmpNew);}private IPictureDisp CreatePictureFromBitmap(int hBmpNew){PicDesc Pic = new PicDesc();IPicture pPic = null;GUID IID_IDispatch = new GUID();IID_IDispatch.Data1 = 0x20400;IID_IDispatch.Data4[0] = 0xC0;IID_IDispatch.Data4[7] = 0x46;Pic.SIZE = 20;Pic.Type = 1;Pic.hBmp = hBmpNew;Pic.hPal = 0;// Create Picture object.int result = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, pPic);return pPic as IPictureDisp;}private bool DrawToDC(int hdc, int lWidth, int lHeight, ISymbol pSymbol, int lGap){// Create the Transformation and Geometry required by ISymbol::Draw.IEnvelope pEnvelope;ITransformation pTransformation;IGeometry pGeom;pEnvelope = new EnvelopeClass();pEnvelope.PutCoords(lGap, lGap, lWidth - lGap, lHeight - lGap);pTransformation = CreateTransFromDC(hdc, lWidth, lHeight);pGeom = CreateSymShape(pSymbol, pEnvelope);// Perform the Draw operation.if (pTransformation == null || pGeom == null) return false;pSymbol.SetupDC(hdc, pTransformation);pSymbol.Draw(pGeom);pSymbol.ResetDC();return true;}private bool DrawToWnd(int hWnd, ISymbol pSymbol, int lGap){int hDC;if (hWnd != 0){// Calculate size of window.RECT udtRect = new RECT();int lResult;lResult = GetClientRect(hWnd, out udtRect);if (lResult != 0){int lWidth, lHeight;lWidth = udtRect.Right - udtRect.Left;lHeight = udtRect.Bottom - udtRect.Top;hDC = GetDC(hWnd);    // Must release the DC afterwards.if (hDC != 0){return DrawToDC(hDC, lWidth, lHeight, pSymbol, lGap);}ReleaseDC(hWnd, hDC);  //' Release cached DC obtained with GetDC.}}return false;}private ITransformation CreateTransFromDC(int hDC, int lWidth, int lHeight){// Calculate the parameters for the new transformation, based on the dimensions passed to this function.IEnvelope pBoundsEnvelope = new EnvelopeClass();pBoundsEnvelope.PutCoords(0, 0, lWidth, lHeight);tagRECT deviceRect;deviceRect.left = 0;deviceRect.top = 0;deviceRect.right = lWidth;deviceRect.bottom = lHeight;//int dpi;//dpi = GetDeviceCaps(hDC, LOGPIXELSY);//if (dpi == 0) return null;// Create a new display transformation and set its properties.IDisplayTransformation pDisplayTransformation = new DisplayTransformationClass();pDisplayTransformation.VisibleBounds = pBoundsEnvelope;pDisplayTransformation.Bounds = pBoundsEnvelope;pDisplayTransformation.set_DeviceFrame(ref deviceRect);pDisplayTransformation.Resolution = 300;return pDisplayTransformation;}private IGeometry CreateSymShape(ISymbol pSymbol, IEnvelope pEnvelope){IGeometry geom = null;// This function returns an appropriate Geometry type depending on the Symbol type passed in.if (pSymbol is IMarkerSymbol){// For a MarkerSymbol return a Point.IArea pArea = pEnvelope as IArea;geom = pArea.Centroid;}else if (pSymbol is ILineSymbol || pSymbol is ITextSymbol){//For a LineSymbol or TextSymbol return a Polyline.IPolyline pPolyline = new PolylineClass();pPolyline.FromPoint = pEnvelope.LowerLeft;pPolyline.ToPoint = pEnvelope.UpperRight;geom = pPolyline;}else{// For any FillSymbol return an Envelope.geom = pEnvelope;}return geom;}private void ssss(){}private int GetBitmap(ISymbol symbol, IGeometry geometry, int lWidth, int lHeight){if (symbol == null) return 0;if (geometry == null) return 0;RECT rect;rect.Left = 0;rect.Top = 0;rect.Right = lWidth;rect.Bottom = lHeight;int hDC = GetDC(0);int hMemDC = CreateCompatibleDC(hDC);int hBitmap = CreateCompatibleBitmap(hDC, lWidth, lHeight);int hOldBitmap = SelectObject(hMemDC, hBitmap);int hBrush = CreateSolidBrush(RGB2Long(255, 255, 255));int hOldBrush = SelectObject(hMemDC, hBrush);FillRect(hMemDC, rect, hBrush);//paint a white background.symbol.SetupDC(hMemDC, null);symbol.Draw(geometry);symbol.ResetDC();SelectObject(hDC, hOldBitmap);SelectObject(hDC, hOldBrush);DeleteObject(hBrush);ReleaseDC(0, hMemDC);ReleaseDC(0, hDC);DeleteDC(hMemDC);DeleteDC(hDC);return hBitmap;}private long RGB2Long(int red, int green, int blue){return red + (0x100 * green) + (0x10000 * blue);}private int CopyScreenToBitmap(RECT lpRect){屏幕和内存设备描述表 //IntPtr hScrDC, hMemDC;位图句柄 //int hBitmap, hOldBitmap;选定区域坐标 //int nX, nY, nX2, nY2;位图宽度和高度//int nWidth, nHeight;屏幕分辨率//int xScrn, yScrn;确保选定区域不为空矩形 //if (IsRectEmpty(lpRect) != 0) return 0;为屏幕创建设备描述表 //hScrDC = CreateDC("DISPLAY", "aa", "bb", 0);为屏幕设备描述表创建兼容的内存设备描述表 //hMemDC = CreateCompatibleDC(hScrDC);获得选定区域坐标 //nX = lpRect.Left;//nY = lpRect.Top;//nX2 = lpRect.Right;//nY2 = lpRect.Bottom;获得屏幕分辨率 //xScrn = GetDeviceCaps(hScrDC, HORZRES);//yScrn = GetDeviceCaps(hScrDC, VERTRES);确保选定区域是可见的 //if (nX < 0) nX = 0;//if (nY < 0) nY = 0;//if (nX2 > xScrn) nX2 = xScrn;//if (nY2 > yScrn) nY2 = yScrn;//nWidth = nX2 - nX;//nHeight = nY2 - nY;创建一个与屏幕设备描述表兼容的位图 //hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);把新位图选到内存设备描述表中 //hOldBitmap = SelectObject(hMemDC, hBitmap);把屏幕设备描述表拷贝到内存设备描述表中 //BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, 13369376);得到屏幕位图的句柄 //hBitmap = SelectObject(hMemDC, hOldBitmap);清除 //DeleteDC(hScrDC);//DeleteDC(hMemDC);返回位图句柄 //return hBitmap;Image.FromHbitmap(new IntPtr(hBMP));return 0;}public const int HORZSIZE = 4;public const int VERTSIZE = 6;public const int HORZRES = 8;public const int VERTRES = 10;public const int ASPECTX = 40;public const int ASPECTY = 42;public const int LOGPIXELSX = 88;public const int LOGPIXELSY = 90;public const int SRCCOPY = 13369376;public struct GUID{public int Data1;public int Data2;public int Data3;public byte[] Data4;}public struct PicDesc{public int SIZE;public int Type;public int hBmp;public int hPal;public int intReserved;}public struct RECT{public int Left;public int Top;public int Right;public int Bottom;}[DllImport("gdi32.dll", EntryPoint = "DeleteDC")]public static extern IntPtr DeleteDC(IntPtr hDc);[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]public static extern IntPtr DeleteObject(IntPtr hDc);[DllImport("gdi32.dll", EntryPoint = "BitBlt")]public static extern bool BitBlt(IntPtr hdcDest, int xDest,int yDest, int wDest, int hDest, IntPtr hdcSource,int xSrc, int ySrc, int RasterOp);[DllImport("gdi32.dll", EntryPoint = "CreateCompatibleBitmap")]public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,int nWidth, int nHeight);[DllImport("gdi32.dll", EntryPoint = "CreateCompatibleDC")]public static extern IntPtr CreateCompatibleDC(IntPtr hdc);[DllImport("gdi32.dll", EntryPoint = "SelectObject")]public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);[DllImport("gdi32")]public static extern int CreateCompatibleDC(int hDC);[DllImport("gdi32")]public static extern int CreateCompatibleBitmap(int hDC, int hObject);[DllImport("gdi32")]public static extern int CreateCompatibleBitmap(int hDC, int width, int hight);[DllImport("gdi32")]public static extern int DeleteDC(int hDC);[DllImport("gdi32")]public static extern int SelectObject(int hDC, int hObject);[DllImport("gdi32")]public static extern int CreatePen(int nPenStyle, int nWidth, int crColor);[DllImport("gdi32")]public static extern int CreateSolidBrush(long crColor);[DllImport("gdi32")]public static extern int DeleteObject(int hObject);[DllImport("GDI32.dll")]public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);[DllImport("gdi32.dll")]private static extern IntPtr CreateDC(string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定位"NULL" int lpInitData // 任意的打印机数据 );[DllImportAttribute("olepro32.dll")]public static extern int OleCreatePictureIndirect(PicDesc pDesc, GUID RefIID, int fPictureOwnsHandle, IPicture pPic);[DllImport("User32.dll")]public static extern int GetDC(int hWnd);[DllImport("User32.dll")]public static extern int ReleaseDC(int hWnd, int hDC);[DllImport("User32.dll")]public static extern int FillRect(int hdc, RECT lpRect, int hBrush);[DllImport("User32.dll")]public static extern int IsRectEmpty(RECT lpRect);[DllImport("user32.dll", SetLastError = true)]static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref int pvParam, uint fWinIni);[DllImport("user32.dll")]public static extern int GetClientRect(int hWnd, out RECT lpRect);[DllImport("user32.dll")]public static extern int GetWindowRect(int hwnd, out RECT lpRect);private void lvRendererFields_DoubleClick(object sender, EventArgs e){ListViewItem selectedItem = lvRendererFields.FocusedItem;if (selectedItem == null) return;int imgIdx = selectedItem.ImageIndex;//ISymbol symbol = GetSymbolBySymbolSelector(esriGeometryType.esriGeometryPolygon);IStyleGalleryItem styleItem = GetSymbolBySymbologyControl("Marker Symbols");if (styleItem == null) return;ISymbol symbol = styleItem.Item as ISymbol;if (symbol == null) return;//symbolPBox.Visible = true;IStyleGalleryClass mStyleClass = new MarkerSymbolStyleGalleryClassClass();Bitmap image = StyleGalleryItemToBmp(24, 24, mStyleClass, styleItem);//Bitmap image = DrawToPictureBox(symbol, symbolPBox);Largeimage.Images[imgIdx] = image;Smallimage.Images[imgIdx] = image;lvRendererFields.Refresh();if (fieldSymbolHashTable.ContainsKey(selectedItem.Text)){fieldSymbolHashTable.Remove(selectedItem.Text);}fieldSymbolHashTable.Add(selectedItem.Text, symbol);//symbolPBox.Visible = false;}public Bitmap StyleGalleryItemToBmp(int iWidth, int iHeight, IStyleGalleryClass mStyleGlyCs, IStyleGalleryItem mStyleGlyItem){//建立符合规格的内存图片Bitmap bmp = new Bitmap(iWidth, iHeight);Graphics gImage = Graphics.FromImage(bmp);//建立对应的符号显示范围tagRECT rect = new tagRECT();rect.right = bmp.Width;rect.bottom = bmp.Height;//生成预览System.IntPtr hdc = new IntPtr();hdc = gImage.GetHdc();//在图片上绘制符号mStyleGlyCs.Preview(mStyleGlyItem.Item, hdc.ToInt32(), ref rect);gImage.ReleaseHdc(hdc);gImage.Dispose();return bmp;}}
}

关于前面提到的TOC控件爱你不能刷新的问题找到了,需要在axMapControl1_OnViewRefreshed事件里面添加一下代码:

axTOCControl1.Update();即可解决这个问题。不过可能会出现异常:

解决办法见c#+AE开发中,System.Windows.Forms.AxHost.InvalidActiveXStateException 在 ESRI.ArcGIS.AxControls.dll 中发生(问题代码行前添加三行代码初始化控件,修改对应控件名,可以用,启动后使用中暂时未发现异常)

AE+VS+c#开发颜色符号系统之点值符号化(七)相关推荐

  1. AE+VS+c#开发颜色符号系统之统计符号化(八)符号化完结篇

    首先总结一下之前写的几篇符号化文章,列表如下: AE+VS开发颜色符号系统之单一值符号(一) AE+VS开发颜色符号系统之唯一值符号(二) AE+VS开发颜色符号系统之分类符号(三) AE+VS开发颜 ...

  2. 基于C#的AE二次开发-地图渲染之分级设色符号化

    基于C#的AE二次开发-地图渲染之分级设色渲染符号化 我的开发环境为ArcGIS Engine 10.2与Visual studio2010.主地图名称为axMapControl1,Toc目录名为ax ...

  3. 【板栗糖GIS】arcmap—怎么批量修改符号系统的线型,颜色等

    [板栗糖GIS]arcmap-怎么批量修改符号系统的线型,颜色等 目录 1. 准备数据 2. 步骤详情 1. 准备数据 如下图,当数据的类别有很多的时候,只是修改线型等,一个个改起来超级麻烦,那有没有 ...

  4. 基于C#的AE二次开发之地图标注

    基于C#的AE二次开发之地图标注 我的开发环境为ArcGIS Engine 10.2与Visual studio2010.主地图名称为axMapControl1,创建一个菜单或按钮,创建一个点击事件, ...

  5. 神经符号系统、因果推理、跨学科交互,李飞飞、Judea Pearl等16名学者共同探讨AI未来...

    来源:机器之心 本文约7600字,建议阅读15分钟 李飞飞.Judea Pearl等16名学者共同探讨AI未来. 2019年 Gary Marcus 和 Yoshua Bengio 就 AI 技术发展 ...

  6. 【Java7】练习:选角色,挑苹果,员工类,换心脏,斗地主,发工资,客户信息管理软件,开发团队调度系统

    文章目录 1.玩家选择角色:return new 2.人工挑苹果:只一个接口CompareAble 3.员工类接口:implements Comparator 4. 医生帮换心脏:Organ类doWo ...

  7. [*转*] 开发B2C电子商务系统(ASP.NET)--多年前的老文章

    开发BtoC电子商务系统(ASP.NET) 原文还有两个图     在对ASP.NET Web表单的编程模型有了基本的认识后,通过应用于现实的开发案例来提高对ASP.NET Web表单内在运作机制的了 ...

  8. Java全栈开发---Java ERP系统开发:商业ERP(一)UML建模工具的使用

    一.ERP简介 (一)什么是ERP(企业资源计划) 科普-ERP(企业资源规划)简介 ERP系统是企业资源计划, 由美国 Gartner Group 公司于1990年提出.企业资源计划是 MRP II ...

  9. erp系统设计与开发:独自一人开发一整套erp系统是什么水平?

    你不会还不知道吧?现在开发系统越来越简单了,(工欲善其事,必先利其器)只要你选对开发工具,哪怕只有普通水平,你也能独立开发一整套ERP系统. 受限于传统思路,所以在以前我们大部分人常见的ERP系统开发 ...

最新文章

  1. Kali Linux重设root密码
  2. 【转载】c#多线程使用webbrowser控件
  3. 配置Exchange 2010邮箱和邮件大小限制
  4. 生成器作为(快速失败)状态机
  5. python字符串二(find();index();count();rfind();rindex();replace();替换;.split();分割;join();合并)
  6. AI预测自杀趋势 | 加拿大政府采集社媒数据干预自杀行为
  7. 电子数字计算机和电子模拟计算机区别,电子数字计算机和电子模拟计算机的区别在哪里?...
  8. 2021中国科学院文献情报中心期刊分区表 计算机(2)
  9. android 亮屏 激活自动亮度调节,Android 屏幕亮度调节(2.0以后出现亮度自动调节)如何开启、关闭亮度自动调节...
  10. 如何快速提升自己的Java 技术?
  11. 集成底座项目实施总结
  12. 隐私泄露距离你我有多远?APP扩大个人隐私收集,增大隐私保护难度
  13. smbd服务器-网络磁盘映射
  14. 算法笔记 A+B 输入输出练习VIII
  15. 用pip freeze >requirements.txt命令迁移模块
  16. 【VisionMaster】试用版安装说明
  17. nolo手柄配对不上_用NOLOHOME玩电脑VR游戏-支持键鼠和游戏手柄
  18. 中职计算机英语听课记录,英语听课记录完整版).doc
  19. 基于java安全管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  20. EXCEL 懒人,节约时间,摸鱼小技巧-1

热门文章

  1. 计算机网络(第七版)
  2. 电容笔和触控笔有哪些区别?双十一好用不贵电容笔推荐
  3. labview声音信号采集和分离
  4. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理
  5. (2)马裤分:七分裤(长度为 70cm
  6. 计算机编程课程顺序_您可以在2月开始免费在线编程和计算机科学课程
  7. 3D建模软件测试初学者,3D建模软件如何选择?3D建模软件精选
  8. 利用计算机模拟函数图像,计算机模拟实验在教学中的应用论文(2)
  9. knex 找不到mysql_node knex mysql ER_NOT_SUPPORTED_AUTH_MODE
  10. 【Android】自动瘦脸与眼睛放大美颜算法