WCF入门学习教程演示

【菜科解读】
Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。
由 .net framework 3.0 开始引入。
WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。
WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。
WCF专门用于面向服务开发。
跟着msdn的教程试了一下wcf,比起以前用socket真的简单了许多。
1.先创建一个wcf服务库,是服务类库,远程的lib
2.全部按照默认设置,不修改。
然后点发布,会出现一个wcf测试客户端,可以看有没有发布成功。
3.msdn的wcf教程还要求输出控制台命令,生成一些文件。
如果简单使用其实不需要。
现在创建一个控制台程序,作为客户端。
4.添加服务引用(可以看出vs对wcf的高度集成)
5.然后找到刚刚的wcf测试客户端,把服务器地址放上去。
然后调用服务类库上的类,测试
ok,测试完成了。
WCF,入门,学习教程,演示,Windows,CommuniOpenCV是什么OpenCV入门级教程
OpenCV 是一个开源的计算机视觉库,其采用 C/C++ 编写,被设计为可移植的库,OpenCV 的设计目标是执行速度尽可能的快,其主要关注的是实时应用,同时,OpenCV 的另一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关的应用程序。
OpenCV 的结构和内容上面这幅截图是 OpenCV 源码的文件组成结构,可以看出其中包括 cv ,cvaux , cxcore , highgui , ml 这 5 个模块。
如果以库来体现这几个模块之间的关系的话,可以采用下面的结构图来展现:CV: 包含了基本的图像处理函数和高级的计算机视觉算法,包括图像处理,图像结构分析,运动描述和跟踪,模式识别和摄像机标定。
ML: 是机器学习库,包含一些基于统计的分类和聚类工具。
HighGUI: 包含图像和视频的输入/输出函数。
CXCORE: 包含了 OpenCV 的一些基本的数据结构和相关函数。
CVAUX: 该模块则是一般用存放即将被淘汰的算法和函数,同时也包含一些新出现的实验性的函数和算法。
关于 OpenCV 的介绍到此介绍,下面呢,就是通过一个 Demo 来学习一些常用的 API 的使用。
Demo 学习 Demo01下面的 Demo 将介绍如何显示一张图片,具体 API 的使用请注意注释。
//在HighGUI 模块中包含了图像和视频的输入/输出的基本函数 #include "highgui.h" //使用了命令行下运行的形式,其中要在命令行下传递参数 int main(int argc,char ** argv){//通过cvLoadImage 将一幅指定路径的图片加载到内存中 //同时会生成一个IplImage 类型的结构 //这个结构会指向图片所在的内存区域 IplImage * image=cvLoadImage(argv[1]); //通过cvNamedWindow 来建立一个窗体 //因为图片必须在指定的窗体中才能显示 cvNamedWindow("Demo01",0); //通过cvShowImage 函数来指定在指定的窗口中显示指定的图片 cvShowImage("Demo01",image); //暂停程序的执行 //只有当用户按下任意键后才执行后面的代码 cvWaitKey(0); //释放掉加载到内存中的图片所占的内存资源 cvReleaseImage( //销毁窗口 cvDestroyWindow("Demo01"); } 至于程序的执行的话,必须到命令行下执行,同时还需要将一张图片拷贝到 exe 文件所在的目录,然后再在命令行中指定该图片作为参数传递到 Main 函数中。
Demo02下面继续看下一个 Demo,这个 Demo 将展示播放视频文件: //图像和视频的输入/输出均在HighGUI 模块中 #include "highgui.h" //播放视频文件只需要循环的顺序的读取视频中的每一帧 //读到帧后,便可以将这个帧作为普通的图像一样显示即可 int main(int argc,char **argv) { //首先需要建立一个窗口来容纳视频的播放 cvNamedWindow("Demo02",CV_WINDOW_AUTOSIZE); //打开一个视频文件,返回的 CvCapture 结构中包含了视频文件的信息 CvCapture *capture=cvCreateFileCapture(argv[1]);IplImage *frame; //循环顺序的读取视频中的帧 while(1){ //获取当前播放帧的下一个帧,并且将获取到的帧加载到内存中,覆盖掉前面帧所占的内存控件frame=cvQueryFrame(capture); if(!frame) { //如果没有读取到帧的话则说明播放完毕了 //从而退出播放 break; } //将读取到的帧显示在窗口中 cvShowImage("Demo02",frame); //每播放一个帧就在此等待30 毫秒 char c=cvWaitKey(30); //如果在30 ms 中用户按下了ESC 键 //(ESC 的ASCII 为27)则退出播放 if(c==27) { break; } } //分配的内存需要手动释放 cvReleaseCapture(&capture); //销毁窗口 cvDestroyWindow("Demo02"); } Demo03上面呢,确实是可以成功的播放视频了,但是一般的视频播放器都是有个滚动条的,允许用户手动拖动滚动条从而定位到视频指定的帧上,下面我们就要实现这个功能了。
//CV 模块中包含了图像处理,图像结构分析, //运动描述和跟踪,模式识别和摄像机标定 #include "cv.h" //包含了图像和视频的输入/输出 #include "highgui.h" //用来标定滚动条当前的位置 int g_Pos=0; //将打开的视频文件作为一个全局变量使用 CvCapture * g_Capture=NULL; //当拖动滚动条后,会回调这个函数 //同时会将当前滚动条的位置以32 位形式传递过来 void CallBackTrackBarSlide(int pos) { //这里便是重新设置视频文件当前播放的帧 cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos); }int main(int argc,char **argv) { cvNamedWindow("Demo03",CV_WINDOW_AUTOSIZE); //根据参数打开指定的视频文件 g_Capture=cvCreateFileCapture(argv[1]); //获得总的帧数int totalFrames= (int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT); if(totalFrames!=0) { //创建滚动条,在这里指定了滚动条拖动后的回调函数 cvCreateTrackbar("TrackBar","Demo03", &g_Pos,totalFrames,CallBackTrackBarSlide); } IplImage * frame; //循环的顺序的遍历所有的帧 while(1){ //获取当前帧的下一个帧,并将其加载到内存中frame=cvQueryFrame(g_Capture); if(!frame) { break; } cvShowImage("Demo03",frame); char chKeyCode=cvWaitKey(30); if(chKeyCode==27) { break; } } cvReleaseCapture(&g_Capture); cvDestroyWindow("Demo03"); return 0; }在测试的时候需要注意,有一些视频文件时不支持动态指定帧的操作,所以有可能拖动时会失败。
然后就可以拖动滚动条来定位帧了 Demo03上面的 Demo 呢确实是实现了可以通过拖动滚动条来实现对视频帧的动态控制,但是有一个问题就是滚动条并不会跟随视频的播放而自带增加,也就是,随时时间流逝,视频会一直播放,但是滚动条如果不人为地拖动的话是不会发生改变的,而我们要是实现的就是当视频播放到哪一个帧了,滚动条就应该位于相应的位置上,所以下面的 Demo 就来实现这个功能。
//CV 模块中包含了图像处理,图像结构分析, //运动描述和跟踪,模式识别和摄像机标定 #include "cv.h" //包含了图像和视频的输入/输出 #include "highgui.h" //用来标定滚动条当前的位置 int g_Pos=0; //将打开的视频文件作为一个全局变量使用 CvCapture * g_Capture=NULL; //当拖动滚动条后,会回调这个函数 //同时会将当前滚动条的位置以32 位形式传递过来 void CallBackTrackBarSlide(int pos) { //这里便是重新设置视频文件当前播放的帧 cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos); g_Pos=pos; } int main(int argc,char **argv) { //建立一个名字叫做Demo04 的窗体 cvNamedWindow("Demo04",CV_WINDOW_AUTOSIZE); //根据参数打开指定的视频文件 g_Capture=cvCreateFileCapture(argv[1]); //获得总的帧数 int totalFrames= (int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT); if(totalFrames!=0) { //创建滚动条,在这里指定了滚动条拖动后的回调函数 cvCreateTrackbar("TrackBar","Demo04", &g_Pos,totalFrames,CallBackTrackBarSlide); } IplImage * frame; //循环的顺序的遍历所有的帧 while(1) { //获取当前帧的下一个帧,并将其加载到内存中 frame=cvQueryFrame(g_Capture); if(!frame) { break; } cvShowImage("Demo04",frame); char chKeyCode=cvWaitKey(30); if(chKeyCode==27) { break; } g_Pos++; //当播放完200 个帧的时候才触发滚动条滚动 if(g_Pos%200==0) { cvSetTrackbarPos("TrackBar","Demo04", g_Pos); } } cvReleaseCapture(&g_Capture); cvDestroyWindow("Demo03"); return 0; }从而实现了滚动条随着视频的播放而自动滚动的效果。
这一篇博文就写到这里了,从上面可以看出,主要是随着逐步的深入来介绍一些 OpenCV 的常用的 API ,其主线是首先是加载一张图片,而后再是加载视频,再在视频中加入滚动条,最后是滚动条和视频联动的效果,随着一步一步的深入,可以更好的熟悉 OpenCV 的几个常用的 API 。
OpenCV,是什么,入门,级,教程,首先,声明,这,
如何打开注册表?秘籍分享助你轻松入门
软件支持 在线重装、U盘制作、自定义重装 等多种模式。
简介:在现代计算环境中,了解如何访问和操作注册表是一项非常有用的技能。
注册表是Windows操作系统中的一个重要数据库,它保存着系统配置信息和软件安装细节。
对于需要深度配置或者解决复杂故障的用户而言,学会打开和使用注册表是一项基本的技能。
本文将带您了解在不同设备上如何轻松、安全地打开注册表,并提供一些实用的建议和案例。
工具原料:系统版本:Windows 11品牌型号:Dell XPS 13 9310(2021版),Microsoft Surface Pro 8(2022版)软件版本:注册表编辑器(Regedit)2023版,Registry Workshop 5.0一、了解注册表的重要性和用途1. 注册表是Windows系统的核心组件之一,它负责存储系统的配置信息以及应用软件的注册数据。
无论是硬件设置、用户界面,还是网络配置,注册表都扮演着关键角色。
2. 理解和编辑注册表可以独立解决一些软件冲突、优化系统性能,并自定义各类程序设置。
例如,当某些软件在系统启动时自动运行,但您希望它们在登录时不启动时,可以在注册表中进行相关设置调节。
二、如何轻松打开注册表1. 在Windows 11系统上,打开注册表的方法相对简便:按下组合键Windows + R调出“运行”窗口,然后输入“regedit”并按下回车键,即可启动注册表编辑器。
2. 对于使用Dell XPS 13或类似设备的用户,可以使用触控板支持的多指手势快速打开搜索窗口,通过搜索关键词“注册表”便可轻松找到注册表编辑器。
3. 在Microsoft Surface Pro 8上,由于具备触控屏幕和手写笔交互的特性,您可以直接在Windows搜索栏手写输入“regedit”,更加快捷便利。
三、谨慎操作注册表的建议1. 修改注册表需格外小心,因为错误的修改可能导致系统不稳定甚至崩溃。
建议在修改前备份注册表。
您可以在注册表编辑器中,通过“文件”菜单选择“导出”来备份当前注册表的全部或部分内容。
2. 在实际案例中,为解决微软Office产品在启动时反复要求重启的问题,某用户在网络上找到修改注册表的方法来恢复相关组件的设置。
这说明注册表修改不仅能够解决问题,还能为不更改系统设置的情况下带来灵活处理的空间。
拓展知识:1. 有关注册表的键和值:注册表由多个主键和子键组成,其中每个键包含一个或多个值。
键类似于树结构中的节点,而值则储存着具体的配置信息。
2. 注册表操作的工具:虽然系统自带了简单的注册表编辑器Regedit,但是有时候可能需要更多功能,比如搜索和批量处理。
此时可以使用如Registry Workshop等工具,这类工具提供更先进的功能,可以帮助用户更方便地管理注册表。
总结:本文通过详解如何打开和操作注册表,帮助用户了解其重要性及应用场景。
无论是通过快捷键、触屏手写还是多指手势操作,按照本文的方法和建议,都能帮助您轻松打开和管理注册表。
请谨记在进行任何修改前做好备份,以防造成不必要的损失。
通过合理应用注册表知识,您可以增强系统的可控性和个性化程度,从而提升使用体验。
标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。
对于商业使用,请联系各自版权所有者,否则法律问题自行承担。
QQ好友恢复系统全攻略:快速找回丢失联系人技巧大全 笔记本显卡天梯解析:2024年最新GPU性能排行榜解读 如何打开注册表?秘籍分享助你轻松入门 分类于: 回答于:2025-03-02 简介:在现代计算环境中,了解如何访问和操作注册表是一项非常有用的技能。
注册表是Windows操作系统中的一个重要数据库,它保存着系统配置信息和软件安装细节。
对于需要深度配置或者解决复杂故障的用户而言,学会打开和使用注册表是一项基本的技能。
本文将带您了解在不同设备上如何轻松、安全地打开注册表,并提供一些实用的建议和案例。
工具原料:系统版本:Windows 11品牌型号:Dell XPS 13 9310(2021版),Microsoft Surface Pro 8(2022版)软件版本:注册表编辑器(Regedit)2023版,Registry Workshop 5.0一、了解注册表的重要性和用途1. 注册表是Windows系统的核心组件之一,它负责存储系统的配置信息以及应用软件的注册数据。
无论是硬件设置、用户界面,还是网络配置,注册表都扮演着关键角色。
2. 理解和编辑注册表可以独立解决一些软件冲突、优化系统性能,并自定义各类程序设置。
例如,当某些软件在系统启动时自动运行,但您希望它们在登录时不启动时,可以在注册表中进行相关设置调节。
二、如何轻松打开注册表1. 在Windows 11系统上,打开注册表的方法相对简便:按下组合键Windows + R调出“运行”窗口,然后输入“regedit”并按下回车键,即可启动注册表编辑器。
2. 对于使用Dell XPS 13或类似设备的用户,可以使用触控板支持的多指手势快速打开搜索窗口,通过搜索关键词“注册表”便可轻松找到注册表编辑器。
3. 在Microsoft Surface Pro 8上,由于具备触控屏幕和手写笔交互的特性,您可以直接在Windows搜索栏手写输入“regedit”,更加快捷便利。
三、谨慎操作注册表的建议1. 修改注册表需格外小心,因为错误的修改可能导致系统不稳定甚至崩溃。
建议在修改前备份注册表。
您可以在注册表编辑器中,通过“文件”菜单选择“导出”来备份当前注册表的全部或部分内容。
2. 在实际案例中,为解决微软Office产品在启动时反复要求重启的问题,某用户在网络上找到修改注册表的方法来恢复相关组件的设置。
这说明注册表修改不仅能够解决问题,还能为不更改系统设置的情况下带来灵活处理的空间。
拓展知识:1. 有关注册表的键和值:注册表由多个主键和子键组成,其中每个键包含一个或多个值。
键类似于树结构中的节点,而值则储存着具体的配置信息。
2. 注册表操作的工具:虽然系统自带了简单的注册表编辑器Regedit,但是有时候可能需要更多功能,比如搜索和批量处理。
此时可以使用如Registry Workshop等工具,这类工具提供更先进的功能,可以帮助用户更方便地管理注册表。
总结:本文通过详解如何打开和操作注册表,帮助用户了解其重要性及应用场景。
无论是通过快捷键、触屏手写还是多指手势操作,按照本文的方法和建议,都能帮助您轻松打开和管理注册表。
请谨记在进行任何修改前做好备份,以防造成不必要的损失。
通过合理应用注册表知识,您可以增强系统的可控性和个性化程度,从而提升使用体验。
菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。