如何生成IStyleGalleryItem和ISymbol对象的预览图

手把手教你用UNet实现轨道缺陷检测(附RSDDs数据集下载与完整代码) 本文详细介绍了如何使用UNet模型实现轨道缺陷检测,包括RSDDs数据集的下载与处理、UNet架构的改进与优化、训练策略设计以及模型部署的全流程。通过实战案例,展示了如何利用深度学习技术提升工业质检效率,特别适合从事工业缺陷检测和图像处理的开发者参考。 阅读详情

 

先来看一下ArcMap的符号选择器:


ArcMap的符号选择器都提供了符号的预览图,另一个预览图的位置是在按钮上,比如设置MapGrid的格网交点符号和格网线符号。

本文给出生成这里的符号预览图的代码。

方法1:通过ISymbologyStyleClass的Preview方法生成预览图

        private string routin_ReadRegistry(string sKey)
        {
            Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sKey, true);
            if (rk == null) return "";
            return (string)rk.GetValue("InstallDir");
        }


        public void LoadStyleGalleryItems()
        {
            string sInstall = routin_ReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");
            if (sInstall == "")
            {
                return;
            }

            ISymbologyControl pSymbologyControl = new SymbologyControlClass();
            pSymbologyControl.LoadStyleFile(sInstall + "\\Styles\\ESRI.ServerStyle");
            m_pSymbologyStyleClass = pSymbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassScaleBars);

            //Clean items in ImageComboBox and images in ImageCollection.
            this.imageComboBoxEdit1.Properties.Items.Clear();
            this.imageCollection1.Images.Clear();

            int nWidth, nHeight;
            nWidth = this.imageCollection1.ImageSize.Width;
            nHeight = this.imageCollection1.ImageSize.Height;

            Image pImage = null;

            //Load StyleGalleryItems into he ImageComboBox's drop down list.
            IStyleGalleryItem pStyleGalleryItem = null;
            IPictureDisp pPicture = null;
            for (int i = 0; i < m_pSymbologyStyleClass.get_ItemCount(m_pSymbologyStyleClass.StyleCategory); i++)
            {
                pStyleGalleryItem = m_pSymbologyStyleClass.GetItem(i);
                pPicture = m_pSymbologyStyleClass.PreviewItem(pStyleGalleryItem, nWidth, nHeight);
                pImage = System.Drawing.Image.FromHbitmap(new IntPtr(pPicture.Handle));
                AddItem(pStyleGalleryItem.Name, pImage, pStyleGalleryItem, i);
            }
            this.imageComboBoxEdit1.SelectedIndex = 0;
        }

        private void AddItem(string sDescription, Image pImage, IStyleGalleryItem pStyleGalleryItem, int nImageIndex)
        {
            this.imageComboBoxEdit1.Properties.Items.Add(new ImageComboBoxItem(sDescription, pStyleGalleryItem, nImageIndex));
            this.imageCollection1.Images.Add(pImage);
        }
        //其中m_pSymbologyStyleClass是ISymbologyStyleClass的实例。

        //上面的代码演示如何使用ISymbologyControl接口在下拉列表控件中加载符号集,其中包含生成预览图的代码,对于符号选择器,使用SymbologyControl,可以直接参考AE范例里的符号选择器的例子,下面是符号选择器里更为精简的代码:
        protected void PreviewImage()
        {
            ISymbologyStyleClass pSymbologyStyleClass = wndSymbologyControl.GetStyleClass(wndSymbologyControl.StyleClass);
            IPictureDisp pPicture = pSymbologyStyleClass.PreviewItem(m_StyleGalleryItem, wndPictureEdit.Width - 10, wndPictureEdit.Height - 10);
            Image pImage = Image.FromHbitmap(new IntPtr(pPicture.Handle));
            wndPictureEdit.Image = pImage;
        }

        protected void LoadStyleCalss(esriSymbologyStyleClass styleClass)
        {
            string sInstall = routin_ReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");
            wndSymbologyControl.LoadStyleFile(sInstall + "\\Styles\\ESRI.ServerStyle");
            wndSymbologyControl.StyleClass = styleClass;
            m_SymbologyStyleClass = wndSymbologyControl.GetStyleClass(wndSymbologyControl.StyleClass);
            m_SymbologyStyleClass.SelectItem(0);
        }
方法2:通过IStyleGalleryClass的Preview方法获取符号的预览图
        private Image PreViewMarkerSymbol(ISymbol pSymbol, int width, int height)
        {
            IStyleGalleryClass pStyleGalleryClass = new MarkerSymbolStyleGalleryClass();
            Image img = new Bitmap(width, height);
            Graphics gc = Graphics.FromImage(img);
            IntPtr hdc = gc.GetHdc();
            tagRECT rect = new tagRECT();
            rect.left = 0;
            rect.top = 0;
            rect.right = width;
            rect.bottom = height;
            pStyleGalleryClass.Preview(pSymbol, hdc.ToInt32(), ref rect);
            gc.ReleaseHdc(hdc);
            gc.Dispose();
            return img;
        }


        private void checkEdit2_CheckedChanged(object sender, EventArgs e)
        {
            if (m_bLoading) return;
            if (mMapGrid != null)
            {
                if (checkEdit2.Checked)
                {
                    mMapGrid.LineSymbol = null;
                    ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbol();
                    pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCross;
                    IMarkerSymbol pMarkerSymbol = pSimpleMarkerSymbol as IMarkerSymbol;
                    mMapGrid.TickMarkSymbol = pMarkerSymbol;
                    mMapGrid.SetLabelVisibility(true, true, true, true);
                    simpleButton1.Image = PreViewMarkerSymbol(pMarkerSymbol as ISymbol, simpleButton1.Height, simpleButton1.Width);
                    if (ValueChanged != null) ValueChanged();
                }
            }
        }
使用第二种方法时,要注意ISymbol对象的类型。因为所有符号集类都实现了IStyleGalleryClass接口,如MarkerSymbolStyleGalleryClass、LineSymbolStyleGalleryClass、ScaleBarStyleGalleryClass等。生成预览图时,各符号的预览图只能由与其对应的StyleGalleryClass来生成,也就是说NorthArrow类型的符号只能用NorthArrowStyleGalleryClass来预览,而不能用其它类型,像下面这样是会发生异常的:
        private void checkEdit3_CheckedChanged(object sender, EventArgs e)
        {
            if (m_bLoading) return;
            if (mMapGrid != null)
            {
                if (checkEdit3.Checked)
                {
                    ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();
                    pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
                    ILineSymbol pLineSymbol = pSimpleLineSymbol as ILineSymbol;
                    mMapGrid.LineSymbol = pLineSymbol;
                    mMapGrid.TickMarkSymbol = null;
                    mMapGrid.SetLabelVisibility(true, true, true, true);
                    simpleButton1.Image = PreViewMarkerSymbol(pLineSymbol as ISymbol, simpleButton1.Height, simpleButton1.Width);
                    if (ValueChanged != null) ValueChanged();
                }
            }
        }
这里,传入的是LineSymbol对象,在PreViewMarkerSymbol中,用MarkerSymbolStyleGalleryClass的事例来预览一个LineSymbol,程序在调用Preview时,会直接崩溃,正确的用法是:
        private Image PreViewLineSymbol(ISymbol pSymbol, int width, int height)
        {
            IStyleGalleryClass pStyleGalleryClass = new LineSymbolStyleGalleryClass();
            Image img = new Bitmap(width, height);
            Graphics gc = Graphics.FromImage(img);
            IntPtr hdc = gc.GetHdc();
            tagRECT rect = new tagRECT();
            rect.left = 0;
            rect.top = 0;
            rect.right = width;
            rect.bottom = height;
            pStyleGalleryClass.Preview(pSymbol, hdc.ToInt32(), ref rect);
            gc.ReleaseHdc(hdc);
            gc.Dispose();
            return img;
        }


        private void checkEdit3_CheckedChanged(object sender, EventArgs e)
        {
            if (m_bLoading) return;
            if (mMapGrid != null)
            {
                if (checkEdit3.Checked)
                {
                    ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();
                    pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
                    ILineSymbol pLineSymbol = pSimpleLineSymbol as ILineSymbol;
                    mMapGrid.LineSymbol = pLineSymbol;
                    mMapGrid.TickMarkSymbol = null;
                    mMapGrid.SetLabelVisibility(true, true, true, true);
                    simpleButton1.Image = PreViewLineSymbol(pLineSymbol as ISymbol, simpleButton1.Height, simpleButton1.Width);
                    if (ValueChanged != null) ValueChanged();
                }
            }
        }

实际上IStyleGalleryItem的Item成员,都是ISymbol成员,因此一个ISymbol对象,除了可以直接用IStyleGalleryClass的Previe预览以外,还可以转换成IStyleGalleryItem然后使用ISymbologyStyleClass的Preview方法来预览,比如:

IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItemClass();
IClone pClone = pScaleBar as IClone;
pStyleGalleryItem.Item = pClone.Clone();

之后就可以使用第一种方法来生成预览图了。

下面是自制的符号选择器:


Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器) 本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好! 阅读详情

相关推荐

到底什么是电源的斜波补偿,电源芯片CS引脚作用,一文讲清楚!

上文有提到电流环,其实电流环再细分也有很多模式,用的最多的是峰值电流模式峰值电流模式调节工作原理如下:(1)当输出负载增大时,输出电压降低,因此,Vc 增大,线性增加的电感电流只有升高到更大的值才能使 PWM 电流比较器翻转,开关管导通的时间增长,占空比增加,输入功率增加,因此输出电压增加,当输出电压增加到调节的范围内时,系统保持平衡。

jwgdhuwdhg的博客 1万+

ESRI.ArcGIS.Controls.ISymbologyStyleClass

提供对控制符号控件样式类的成员的访问。 描述 ISymbologyControl接口提供用于管理SymbologyStyleClass中的单个符号项的属性和方法。 成员   属性 描述   AddItem 将项目添加到SymbolStyleClass中。   GetItem 在SymbologyStyleClass中返回指定索引处的项。   ...

ScapeD的博客 399

PaddleOCR在医疗票据识别中的实战:从部署到业务字段提取

本文详细介绍了PaddleOCR在医疗票据识别中的实战应用,重点阐述了其离线部署方案与PP-OCRv3模型选型优势。针对医疗票据敏感数据不出本地的合规要求,文章提供了从环境搭建、模型配置到核心字段提取策略的完整流程,并分享了性能优化与系统集成的实践经验,有效解决了医疗票据自动化录入的难题。

weixin_29271053的博客 236

IStyleGallery 和IstyleGalleryItem以及IStyleGalleryStorage接口理解

IStyleGalleryStorage Provides access to members that manage the files used in the Style Gallery. Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server. DescriptionIStyleGalleryStorage ...

weixin_34109408的博客 412

ADNI数据集下载(详细)

刚刚接触到这个数据集的时候比较头疼,用了好长的时间才把下载过程和预处理过程弄明白。需要发送电子邮件给官方平台,收到回信后才能够下载到数据集。 1、ADNI账号注册 第一步:搜索百度打开ADNI 第二步,点击ADTA&amp;amp;SAMPLES 第三步:一直将鼠标往下拉 点击ADNI,进入里面填写信息。需要填写的信息还是挺多的,耐心填写,再等到邮件回复就可以了 2、ADNI数据集下载 登录申请的邮...

蜗牛遥遥 3万+

单细胞marker基因表达密度图-(还有一个包装函数)

我们借助Nebulosa,将上面的过程包装为一个函数,还是那句话,受累麻烦的事我们来解决,您轻松即可,先看看函数参数:需要注意的是,如果你只想框选某一类celltype,理想模式是这群celltype是单独聚类的,没有散落在其他类群,否则将会全部框选,效果不好,建议使用AI/PS添加。需要注意,这里我算是投机取巧了,用了一个和这个作图毫无关系的包ggnetwork,主要的目的是用他的theme_blank()主题,一次性将所有清空,当然也可以自己慢慢写,不过有现成的,为啥不用呢?这质感不就上去了嘛。

qq_42090739的博客 1368

ESRI.ArcGIS.Display.IStyleGalleryItem

提供对在样式库中定义项目的成员的访问。 描述 符号和地图元素存储在样式库中。每个符号或MAP元素都有一个唯一的ID,可以从样式库中的项读取。名称和类别也是样式库中的项的属性。这两个字段,连同项目本身,可以根据需要进行更新和更改。   成员 描述   Category 项目的类别。   ID 样式库中的项ID。   Item 要存储在...

ScapeD的博客 815

【题解】【中国大学MOOC】(北京大学)人工智能与信息社会考试——期末考试

1.在Alpha-Beta剪枝算法中,我们把一个结点可能取值的上界记作____值,下界记作____值。 编号 选项 A 以上都不对 B Beta,Alpha C Alpha,Beta D Max,Min 2.属于非完全信息博弈的游戏是 编号 选项 A 围棋 B 井字棋 C 军棋 D 黑白棋 3.图中的剪枝过程称为____剪枝 ...

葑鈊丶 1万+

ArcGIS Engine开发教程之图层符号化(三)——符号化Symbol(符号)体系

ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号)、 LineSymbol(线符号)和FillSymbol(填充符号)来绘制地理要素的几何图形。此外还有两种特殊类型的符号:一种是TextSymbol用于文字标注;另一种是3D Chart符号,用于显示饼图等三维对象,如需详细了解请查找帮助文档。 1.MarkerSymbol对象

feng991254的专栏 5064

BMS | 从一串到几百串硬件架构简介

锂电池在生活中越来越多的方面扮演能源的角色,除了大家熟知的电动汽车行业,在一些消费类,工业类电子产品比如手机,电动自行车,电动工具中都有应用,追本溯源今天我们一起来学习下最基础的BMS架构。 1~4串架构 以S8241为代表的无通信/无固件/模拟器件 可实现过充保护、过放保护、过流/短路,参数由器件后缀代码决定;通信类手持设备供电系统;1~4节电池保护板架构 如图使用S-8241系列保护IC,一对充放电MOS管控制充放电的回路的切断和接通,系统供电来自于电芯电压,VM引脚用于检测过...

ningvay的博客 9917

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1015

AE+C#开发问题之三——ISymbologyControlEvents_OnStyleClassChangedEvent的e属性强制转换问题

做图层样式修改的时候,遇见了下面的问题 esriSymbologyStyleClass是一个枚举, symbologyStyleClass是一个对象 可以理解为symbologyStyleClass并没有实现esriSymbologyStyleClass,或者esriSymbologyStyleClass只能作为一个属性 代码改为下面的就好了: switch

GIS on the road happy_h 3564

深入解析 Multi-Agent 协同决策机制与架构设计

让我们从一些基础定义开始,为后续的讨论建立共同的语言。在计算机科学和人工智能领域,智能体(Agent)是指一个能够感知环境、做出决策并执行动作的实体。智能体是任何可以通过传感器感知环境,并通过执行器作用于该环境的事物。atπstat​πst​sts_tst​是时刻ttt的环境状态(或智能体的观测)π\piπ是智能体的策略(Policy),即从状态到动作的映射ata_tat​是智能体在时刻ttt选择执行的动作多智能体系统(MAS)

AI天才研究院 541

如何生成IStyleGalleryItem和ISymbol对象的预览图(转载)

http://blog.youkuaiyun.com/giselite/article/details/8451877 来看一下ArcMap的符号选择器: ArcMap的符号选择器都提供了符号的预览图,另一个预览图的位置是在按钮上,比如设置MapGrid的格网交点符号和格网线符号。 本文给出生成这里的符号预览图的代码。 方法1:通过ISymbologyStyleClass的Preview方法生...

weixin_34146410的博客 321

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IStyleGallery

一、获取ServerStyle库中的符号    Style符号库在ArcGIS Engine开发中对应的是ServerStyle符号库,可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。 用于获取ServerStyle符号库中的符号主要涉及到以下: 接口名称 功能描述 ISt

1229

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IStyleGallery arcengine

转自点击打开链接 一、获取ServerStyle库中的符号    Style符号库在ArcGIS Engine开发中对应的是ServerStyle符号库,可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。 用于获取ServerStyle符号库中的符号主要涉及到以下: 接口名称

600

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Arcgis Engine二次开发,如何获取符号库文件中的符号

可根据传入参数获取符号库中的样式符号,简单实例如下:         ISymbol  pSymbol = GetSymbol(@"F:\Users\Administrator\Desktop\makeServerStyle\test.ServerStyle", "Fill Symbols", "城镇用地");          ///         ///获取符号库中符号

技术集中营 3302

唯一值符号化(转载)

转自:http://blog.youkuaiyun.com/lysc_forever/article/details/7768825 Style符号库在ArcGIS Engine开发中对应的是ServerStyle符号库,可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。 用于获取ServerStyle符号库中的符...

weixin_34396103的博客 352

IStyleGallery arcengine (转载)

转自:http://www.cnblogs.com/zhangjun1130/archive/2012/04/17/2454035.html 一、获取ServerStyle库中的符号    Style符号库在ArcGIS Engine开发中对应的是ServerStyle符号库,可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的Ser...

weixin_34254823的博客 185

Arcengine中关于符号相关类和接口的说明

1.符号库条目接口IStyleGalleryItem:IStyleGalleryItem是ServerStyleGalleryItem类的接口包括属性有类别:Category编号:ID名称:Name符号:Item2.IStyleGalleryClass接口IStyleGalleryClass是各个符号类别的接口,现在符号类别是固定的包括点,线,面,颜色,填充等十多种。利用此借口可以增加新的符号,编

旅途 1894

ISymbol

public void Draw (IGeometry Geometry); public void QueryBoundary (     int hDC,     ITransformation displayTransform,     IGeometry Geometry,     IPolygon boundary ); Valid input Geometries a...

weixin_34235371的博客 289

ServerStyle转化为图片

1.符号库条目接口IStyleGalleryItem:IStyleGalleryItem是ServerStyleGalleryItem类的接口包括属性有类别:Category编号:ID名称:Name符号:Item2.IStyleGalleryClass接口IStyleGalleryClass是各个符号类别的接口,现在符号类别是固定的包括点,线,面,颜色,填充等十多种。利用此借口可以增加新的符号,编

Lee的专栏 1808

IStyleGallery.AddItem、UpdateItem、RemoveItem用法 (转载)

天做arcengine的符号库管理,做好了符号文件symbol.StyleServer。用到方法AddItem、UpdateItem、RemoveItem。怎么都报错。网上同样问题的人也有一些,就是不见人回答,只有自己琢磨。最终搞定了。写下来,备用。   参考了一篇这样的文章IStyleGallery 和IstyleGalleryItem以及IStyleGalleryStorage接口理解. ...

weixin_33939843的博客 291

重写Combobox实现颜色带(ColorRamp)Symbol预览与选择——总结

在地图符号化的时候经常要预览与选择Color Ramp Symbol,像ArcMap那样将ColorRamp符号放在Combobox现实既方便也实用,下面是实现原理与方法。     1、首先解决的是如何将图片放在Combobox中,要知道vs2005乃至vs2008的Combo

ychh_hjr的专栏 4428

Arcgis Engine 实现单波段栅格图层色带渲染(包括色带反转)

    最近有同事问我ArcMap中的色带反转怎么实现,刚好我在整理以前的项目,找到了一些源码备忘。                  先说下思路,简单来说就是得到栅格图层的IRasterRenderer,转换为IRasterStretchColorRampRenderer,在将这个接口转换为IRasterStretch,IRasterStretch中有个Invert的方法可以控制色带是否反转...

tyut_qc的博客 6817
上一篇: 快速排序法及其应用
下一篇: 利用位运算计算某种数据类型的最大值和最小值
深蓝静音
博客等级 码龄17年 263粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝静音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值