- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在工程软件中会遇到在一张工程图纸或背景图中标注一些标志或者其他信息,
在静态图片中我们很方便可以使用文字或者其他小图标形式进行标注!
但也造成了所标注的点只能是静态显示而已,现在我们的需求是,一张背景图,上面有一些点需要标注,
这些点需要可以移动 鼠标进入区域可以提示或高亮 背景图分辨率变化时 这些点能自动计算相对位置及大小使重叠在背景中
当然还有很多其他用处,如联动操作!
?
下面就已我实际中遇到的问题来做演示:
先看2张图进行一下对比
图一:?
从这张图可以看出 当鼠标移入此区域时 会将此区域高亮并TollTip下(演示图做的有点粗糙 大家见谅)
?图二:
这张是鼠标移出后的图,大家可以看到几乎是完全重叠看不出 (上图高亮区域为一个自定义控件), 当然仔细看下 其实重合的并不是完美, 下面我会讲一个办法来做到看不出粗糙
?
OK,看完这2张演示草图后,我先来描述下如何实现这样的功能,其实也很简单
1: 在背景图需要显示的区域截图该区域图, 要计算此截取区域相对与原图的 top,left,windth,height比例
?? (注意 需要计算出比例 以便在程序中档背景图分辨率变量时根据比例重新计算区域图的大小及位置)
2:将截取的区域图不需要高亮的部分处理为透明,这一步为下一步制作部规则自定义控件做准备
3:制作一个区域图为背景的不规则自定义控件,
4,:将自定义控件添加到显示原背景图的容器中;如下演示
?
?剩下部分就是自定义控件根据背景进行位置及大小的计算了,先贴一部分用到的代码,
与制作不规则控件相关
?public?static?Region?InitCreate(Bitmap?bitmap)????????{????????????if?(bitmap?==?null)???//由窗口最小化引发自定义控件的背景图为null?控件大小为0????????????????return?null;????????????int?height?=?bitmap.Height;????????????int?width?=?bitmap.Width;????????????int?xStart,?xEnd;????????????GraphicsPath?grpPath?=?new?GraphicsPath();????????????for?(int?y?=?0;?y??height;?y++)????????????{????????????????//逐行扫描;????????????????for?(int?x?=?0;?x??width;?x++)????????????????{????????????????????//略过连续透明的部分;????????????????????while?(x??width??bitmap.GetPixel(x,?y).A?=?10)????????????????????{????????????????????????x++;????????????????????}????????????????????//不透明部分;????????????????????xStart?=?x;????????????????????while?(x??width??bitmap.GetPixel(x,?y).A??10)????????????????????{????????????????????????x++;????????????????????}????????????????????xEnd?=?x;????????????????????if?(bitmap.GetPixel(x?-?1,?y).A?=?10)????????????????????{????????????????????????grpPath.AddRectangle(new?Rectangle(xStart,?y,?xEnd?-?xStart,?1));????????????????????}????????????????}????????????}????????????return?new?Region(grpPath);????????}
?
?制作的不规则控件为了减少刷新,需要设置为双缓冲,
(但是不知道是双缓冲原因还是windows机制问题,窗体最小化时会致使自定义控件背景图为null 大小为0,但窗口恢复后又正常,望知道的朋友不惜赐教)?
图像缩放
????????///?summary????????///?Resize图片????????///?/summary????????///?par
原创力文档


文档评论(0)