TOC图例符号转换到ListView
//符号转换
Bitmap PreviewSymbol(IStyleGalleryClass pStyleGalleryClass, object galleryItem, int imgWidth, int imgHeight)
{
Bitmap bitmap = new Bitmap(imgWidth, imgHeight);
Graphics graphics = Graphics.FromImage(bitmap);
tagRECT rect = new tagRECT();
rect.right = bitmap.Width;
rect.bottom = bitmap.Height;
System.IntPtr hdc = graphics.GetHdc();
pStyleGalleryClass.Preview(galleryItem, hdc.ToInt32(), ref rect);
graphics.ReleaseHdc(hdc);
graphics.Dispose();
return bitmap;
}
//遍历渲染,逐个转换符号
ILayer pLayer = axMapControl1.get_Layer(0);
IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer;
IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
if(pFeatureRenderer is IUniqueValueRenderer)
{
IStyleGalleryClass pStyleGalleryClass = new FillSymbolStyleGalleryClassClass();//我这里用面测试的,改造时需要动态的使用
IUniqueValueRenderer pUniqueValueRenderer = pFeatureRenderer as IUniqueValueRenderer;
ISymbol pSymbol = null;
ListViewItem listViewItem;
Image image;
string value;
imageList1.Images.Clear();
listView1.Items.Clear();
for (int i = 0; i < pUniqueValueRenderer.ValueCount; i++)
{
listViewItem = new ListViewItem();
value = pUniqueValueRenderer.get_Value(i);
pSymbol = pUniqueValueRenderer.get_Symbol(value);
image = PreviewSymbol(pStyleGalleryClass, pSymbol, imageList1.ImageSize.Width, imageList1.ImageSize.Height);
imageList1.Images.Add(value,image);
listViewItem.ImageKey = value;
listViewItem.Text = value;
listViewItem.SubItems.Add(value);
listView1.Items.Add(listViewItem);
}
}
else
{
MessageBox.Show("不是楼主想要的东东。");
}