arcengine TOC图例符号转换到ListView

本文介绍了一种将地图中的图例符号转换为ListView中显示的图像的方法。通过遍历图层并获取其渲染器,可以针对不同的值渲染独特的符号,并将其转换为图像以在ListView中展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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("不是楼主想要的东东。");
            }

 来自:http://www.cnblogs.com/lauer0246/archive/2008/10/17/1312369.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值