当前位置:文档之家› Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上

Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上

Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上

前7篇文件我们介绍了Kinect SDK中各种传感器的各种基本知识,我们用实验的方式演示了这些基本对象和方法的如何使用,这些都是Kinect开发最基本的知识。了解了这些基本知识后,就可以开发出一个基于Kinect的简单程序了。但是这些离开发出一个好的基于Kinect的应用程序还有一段距离。后面的文章中,将会结合Kinect SDK介绍WPF以及其它第三方工具,类库来建立一个以Kinect 为驱动的有较好用户体验的程序。我们将利用之前讲到的知识来进行下面一些比较复杂的话题。

Kinect传感器核心只是发射红外线,并探测红外光反射,从而可以计算出视场范围内每一个像素的深度值。从深度数据中最先提取出来的是物体主体和形状,以及每一个像素点的游戏者索引信息。然后用这些形状信息来匹配人体的各个部分,最后计算匹配出来的各个关节在人体中的位置。这就是我们之前介绍过的骨骼追踪。

红外影像和深度数据对于Kinect系统来说很重要,它是Kinect的核心,在Kinect系统中其重要性仅次于骨骼追踪。事实上,这些数据相当于一个输入终端。随着Kinect或者其他深度摄像机的流行和普及。开发者可以不用关注原始的深度影像数据,他们变得不重要或者只是作为获取其他数据的一个基础数据而已。我们现在就处在这个阶段,Kinect SDK并没有提供给开发者访问原始红外影像数据流的接口,但是其它第三方的SDK可以这么做。可能大多数开发者不会使用原始的深度数据,用到的只是Kinect处理好了的骨骼数据。但是,一旦姿势和手势识别整合到Kinect SDK并成为其一部分时,可能开发者甚至不用接触到骨骼数据了。

希望能够早日实现这种集成,因为它代表这Kinect作为一种技术的走向成熟。本篇文章和下篇文章仍将讨论骨骼追踪,但是采用不同的方法来处理骨骼数据。我们将Kinect作为一个如同鼠标,键盘或者触摸屏那样的一个最基本的输入设备。微软当初推出Kinect for Xbox的口号是“你就是控制器”,从技术方面讲,就是“你就是输入设备”。通过骨骼数据,应用程序可以做鼠标或者触摸屏可以做的事情,所不同的是深度影像数据使得用户和应用程序可以实现以前从没有过的交互方法。下面来看看Kinect控制并与用户界面进行交互的机制吧。

1. 用户交互

运行在电脑上的应用程序需要输入信息。传统的信息来自于鼠标或者键盘等这些输入设备。用户直接与这些硬件设备进行交互,然后硬件设备响应用户的操作,将这些操作转换成数据传输到计算机中。计算机接收这些输入设备的信息然后将结果以可视化的形式展现出来。大多数计算机的图像用户界面上会有一个光标(Cursor),他通常代表鼠标所在的位置,因为鼠标是最开始有个滚轮设备。但是现在,如果将这个光标指代鼠标光标的话,可能不太准确,因为现在一些触摸板或手写设备也能像鼠标那样控制光标。当用户移动鼠标或者在触摸板上移动手指时,光标也能响应这种变化。当用户将光标移动到一个按钮上时,通常按钮的外观会发生变化,提示用户光标正位于按钮上。当用户点击按钮时,按钮则为显示另一种外观。当用户松开鼠标上的按键,按钮就会出现另外一种外观。显然,简单的点击事件会涉及到按钮的不同状态。

开发者可能对这些交互界面和操作习以为常,因为诸如WPF之类的用户交互平台使得程序与用户进行交互变得非常简单。当开发网页程序时,浏览器响应用户的交互,开发者只需要根据用户鼠标的悬停状态来设置样式即可进行交互。但是Kinect不同,他作为一个输入设备,并没有整合到WPF中去,因此,作为一个开发者。对操作系统和WPF所不能直接响应的那部分工作需要我们来完成。

在底层,鼠标,触摸板或者手写设备都是提供一些X,Y坐标,操作系统将这些X,Y坐标从其在的空间坐标系统转换到计算机屏幕上,这一点和上篇文章讨论的空间变换类似。操作系统的职责是响应这些标准输入设备输入的数据,然后将其转换到图形用户界面或者应用程序中去。操作系统的图形用户界面显示光标位置,并响应用户的输入。在有些时候,这个过程没有那么简单,需要我们了解GUI平台。以WPF应用程序为例,它并没有对Kinect提供像鼠标和键盘那样的原生的支持。这个工作就落到开发者身上了,我们需要从Kinect

中获取数据,然后利用这些数据与按钮,下拉框或者其他控件进行交互。根据应用程序或者用户界面的复杂度的不同,这种工作可能需要我们了解很多有关WPF的知识。

1.1 WPF应用程序中输入系统介绍

当开发一个WPF应用程序时,开发者并不需要特别关注用户输入机制。WPF会为我们处理这些机制使得我们可以关注于如何响应用户的输入。毕竟作为一个开发者,我们更应该关心如何对用户输入的信息进行分析处理,而不是重新造轮子来考虑如何去收集用户的输入。如果应用程序需要一个按钮,只需要从工具箱中拖一个按钮出来放在界面上,然后在按钮的点击事件中编写处理逻辑即可。在大多

数情况下,开发者可能需要对按钮设置不同的外观以响应用户鼠标的不同状态。WPF会在底层上为我们实现这些事件,诸如鼠标何时悬停在按钮上,或者被点击。

WPF有一个健全的输入系统来从输入设备中获取用户的输入信息,并响应这些输入信息所带来的控件变化。这些API位于System.Windows.Input命名空间中(Presentation.Core.dll),这些API直接从操作系统获取输入设备输入的数据,例如,名为Keyboard,Mouse,Stylus,Touch和Cursor的这些类。InputManager这个类负责管理所有输入设备获取的信息,并将这些信息传递到表现框架中。

WPF的另一类组件是位于System.Windows命名空间(PresentationCore.dll)下面的四个类,他们是UIElement,ContentElement,FrameworkElement以及FrameworkContentElement 。FrameworkElement继承自UIElement,FrameworkContentElement继承自ContentElement。这几个类是WPF中所有可视化元素的基类,如Button,TextBlock及ListBox。更多WPF输入系统相关信息可以参考MSDN文档。

InputManager监听所有的输入设备,并通过一系列方法和事件来通知UIElement和ContentElement对象,告知这些对象输入设备进行了一些有关可视化元素相关的操作。例如,在WPF中,当鼠标光标进入到可视化控件的有效区域时就会触发MouseEnterEvent 事件。UIElement和ContentElement对象也有OnMouseEnter事件。这使得任何继承自UIElement或者ContentElement类的对象也能够接受来自输入设备的所触发的事件。WPF会在触发任何其它输入事件之前调用这些方法。在UIElement和ContentElement 类中也有一些类似的事件包括MouseEnter,MouseLeave,MouseLeftButtonDown,MouseLeftButtonUp,TouchEnter,TouchLeave,TouchUp和TouchDown。

有时候开发者需要直接访问鼠标或者其他输出设备,InputManager对象有一个称之为PrimaryMouseDevice的属性。他返回一个MouseDevice对象。使用MouseDevice对象,能够在任何时候通过调用GetScreenPositon来获取鼠标的位置。另外,MouseDevice 有一个名为GetPositon的方法,可以传入一个UI界面元素,将会返回在该UI元素所在的坐标空间中的鼠标位置。当需要判断鼠标悬停等操作时,这些信息尤其重要。当Kinect SDK每一次产生一幅新的SkeletonFrame帧数据时,我们需要进行坐标空间转换,将关节点位置信息转换到UI空间中去,使得可视化元素能够直接使用这些数据。当开发者需要将鼠标作为输入设备时,MouseDevice对

象中的GetScreenPositon和GetPosition方法能提供当前鼠标所在点的位置信息。

在有些情况下,Kinect虽然和鼠标相似,但是某些方面差别很大。骨骼节点进入或者离开UI上的可视化元素这一点和鼠标移入移出行为类似。换句话说,关节点的悬停行为和鼠标光标一样。但是,类似鼠标点击和鼠标按钮的按下和弹起这些交互,关节点与UI的交互是没有。在后面的文章中,可以看到使用手可以模拟点击操作。在Kinect中相对于实现鼠标移入和移出操作来说,对鼠标点击这种支持相对来说较弱。

Kinect和触摸板也没有太多相同的地方。触摸输入可以通过名为Touch或者TouchDevice的类来访问。单点的触摸输入和鼠标输入类似,然而,多点触控是和Kinect类似的。鼠标和UI之间只有一个交互点(光标)但是触摸设备可以有多个触控点。就像Kinect

可以有多个游戏者一样。从每一个游戏者身上可以捕捉到20个关节点输入信息。Kinect能够提供的信息更多,因为我们知道每一个输入点是属于游戏者身体的那个部位。而触控输入设备,应用程序不知道有多少个用户正在触摸屏幕。如果一个程序接收到了10个输入点,无法判断这10个点是一个人的10个手指还是10个人的一个手指触发的。虽然触控设备支持多点触控,但这仍然是一种类似鼠标或者手写板的二维的输入。然而,触控输入设备除了有X,Y点坐标外,还有触控接触面积这个字段。毕竟,用户用手指按在屏幕上没有鼠标光标那样精确,触控接触面积通常大于1个像素。

当然,他们之间也有相似点。Kinect输入显然严格地符合WPF 所支持的任何输入设备的要求。除了有其它输入设备类似的输入方

式外,他有独特的和用户进行交互的方式和图形用户界面。核心上,鼠标,触控板和手写板只传递一个像素点位置嘻嘻你。输入系统确定该点在可见元素上下文中的像素点位置,然后这些相关元素响应这个位置信息,然后进行响应操作。

期望是在未来Kinect能够完整的整合进WPF。在WPF4.0中,触控设备作为一个单独的模块。最开始触控设备被作为微软的Surface 引入。Surface SDK包括一系列的WPF控件,诸如SurfaceButton,SurfaceCheckBox,和SurfaceListBox。如果你想按钮能够响应触摸事件,最好使用SurfaceButton控件。

能够想象到,如果Kinect被完整的整合进WPF,可能会有一个称之为SkeletonDevice的类。他和Kinect SDK中的SkeletonFrame 对象类似。每一个Skeleton对象会有一个称之为GetJointPoint的方法,他和MouseDevice的GetPositon和TouchDevice的GetTouchPoint类似。另外,核心的可视化元素(UElement, ContentElement, FrameworkElement, FrameworkContentElement)

有能够相应的事件或者方法能够通知并处理骨骼关节点交互。例如,可能有一个JointEnter,JointLeave,和JointHover事件。更进一步,就像触控类有一个ManipulationStarted和ManipulationEnded事件一样,在Kinect输入的时候可能伴随GetstureStarted 和GestureEnded事件。

目前,Kinect SDK和WPF是完全分开的,因此他和输入系统没有在底层进行整合。所以作为开发者的我们需要追踪骨骼关节点位置,并判断节点位置是否和UI界面上的元素有交互。当关节点在对应的UI坐标系可视化界面的有效范围内时,我们必须手动的改变这些可视化元素的外观以响应这种交互。

1.2 探测用户的交互

在确定用户是否和屏幕上的某一可视化元素进行交互之前,我们必须定义什么叫用户和可视化元素的交互。在以鼠标或者光标驱动的应用程序中有两种用户交互方式。鼠标悬停和点击交互。这些将事件划分为更精细的交互。就拿光标悬停来说,它必须进行可视化组件的坐标空间区域,当光标离开这一区域,悬停交互也就结束了。在WPF中,当用户进行这些操作时,会触发MouseEnter和MouseLeave 操作。

除了点击和悬停外,鼠标还有另外一种常用的交互,那就是拖放。当光标移动到可视化组件上方,按下鼠标左键,然后在屏幕上拖动,我们称之为拖动(drag),当用户松开鼠标左键时,我们之位释放操作(drop)。鼠标拖动和释放是一个比较复杂的交互,这点和Kinect 中的手势类似。

本节我们来看一下一些简单的诸如光标悬停,进入,离开可视化控件的交互。在前篇文章中的Kinect连线小游戏中,我们在绘制直线时需要判断手是否在点的合适范围内。在那个小游戏中,应用程序并没有像用户界面和人那样直接响应用户界的操作。这种差别很重要。应用程序在屏幕坐标空间中产生一些点的位置(数字),但是这些点并没有直接从屏幕空间派生。这些点只是存储在变量中的数据而已。我们改变屏幕大小使得很容易展现出来。在接收到新的骨骼数据帧之前。骨骼数据中手的位置被转换到屏幕中点所在的空间坐标系,然后我们判断手所在的位置的点是否在点序列中。技术上来讲,这个应用程序即使没有用户界面也能够正常运行。用户界面是动态的由这些数据产生的。用户直接和这些数据而不是和界面进行交互。

1.2.1命中测试(Hit testing)

判断用户的手是否在点的附近远没有判断手是否在点的位置上那么简单。每一个点只是一个象元。为了使得应用程序能够工作。我们并不要求手的位置敲好在这个点所在的象元上,而是要求在以这个点为中心的某一个区域范围内。我们在点的周围创建了一个圆圈代表点的区域范围,用户的手的中心必须进入到这个点的区域范围才被认为是悬停在该点上。如图所示在圆形中的白色的点是实际的点,虚线绘制的圆形是该点的最大可触及范围。手形图标的中心用白色的点表示。所以,有可能手的图标和点的最大范围接触了,但是手的中心却不在该点的最大范围内。判断手的中心是否在点的最大范围之内称之为命中测试。

在Kinect连线游戏中,用户界面响应数据,依据产生的坐标将点绘制在图像界面上,系统使用点而不是用可视化控件的有效区间来进行命中测试。大多数的应用程序和游戏都不是这样做的。用户界面通常很复杂,而且是动态的。例如在Kinect for Windows SDK中自带的ShapeGame应用就是这样一个例子,它动态的从上至下产生一些形状。当用户触碰这些形状时形状会消失或者弹开。

ShapeGame这个应用比之前的Kinect连线游戏需要更为复杂的命中测试算法。WPF提供了一些工具来帮助我们实现命中测试。在System.Windows.Media命名空间下的VisualTreeHelper帮助类中有一个HitTest方法。这个方法有很多个重载,但是最基本的方法接受两个参数,一个是可视化控件对象,另一个是待测试的点。他返回可视化对象树中该点所命中的最顶层的那个可视化对象。听起来可能有点复杂,一个最简单的解释是,在WPF中有一个分层的可视化输出,有多个对象可能占据同一个相对空间,但是在不同的层。如果该点所在位置有多个对象,那么HitTest返回处在可视化树中处在最顶层的可视化对象。由于WPF的样式和模板系统使得一个控件

能够由一个或者多个元素或者其它控件组成,所在通常在一个点可能有多个可视化元素。

上图可能帮助我们理解可视元素的分层。图中有三个元素:圆形,矩形和按钮。所有三个元素都在Canvas容器中。圆形和按钮在矩形之上,左边第一幅图中,鼠标位于圆形之上,在这点上的命中测试结果将返回这个圆形。第二幅图,即使矩形最底层,由于鼠标位于矩形上,所以命中测试会返回矩形。这是因为矩形在最底层,他是唯一个占据了鼠标光标象元所在位置的可视化元素。在第三幅图中,光标在按钮的文字上,命中测试将返回TextBlock对象,如果鼠标没有位于按钮的文字上,命中测试将会返回ButtonChrome元素。按钮的可视化表现通常由一个或者多个可视化控件组成,并能够定制。实际上,按钮没有继承可视化样式,它是一个没有可视化表现的控件。上图中的按钮使用的是默认样式,它由TextBlock和ButtonChrome这两个控件构成的。在这个例子中,我们通常会获得到有按钮样式组成的元素,但是永远获取不到实际的按钮控件。

为了使得命中测试更为方便,WPF提供了其他的方法来协助进行命中测试。UIElement类定义了一个InputHitTest方法,它接受一个Point对象,并返回该Point对象指定的一个IIputElement元素。UIElement和ContentElement两个类都实现了IInputElement接口。这意味着所有的WPF用户界面元素都实现了这个接口。VisualTreeHelper类中的HitTest方法可以用在一般

的场合。

Note: MSDN中关于UIElement.InputHitTest方法的建议“应用程序一般不需要调用该方法,只有应用程序需要自己重新实现一系列已经实现了的底层输入特征,例如要重新实现鼠标设备的输入逻辑时才会去调用该方法。”由于Kinect并没有原生的集成到WPF中,所以必须重新实现类似鼠标设备的输入逻辑。

WPF中,命中测试依赖于两个变量,一个是可视化元素,另一个是点。测试首先该点转换到可视化元素所在坐标空间,然后确定是否处于该可视化元素的有效范围内。下图可以更好的理解可视化元素的坐标空间。WPF中的每一个可视化元素,不论其形状和大小,都有一个外轮廓:这个轮廓是一个矩形,它包含可视化元素并定义了可视化元素的宽度和高度。布局系统使用这个外轮廓来确定可视化元素的整体尺寸以及如何将其排列在屏幕上。当开发者使用Canvas,Grid,StackPanel等容器来布局其子元素时,元素的外轮廓是这些容器控件如进行布局计算的基础。用户看不到元素的外轮廓,下图中,可视化元素周围的虚线矩形显示了这些元素的外轮廓。此外,每一个元素有一个X,Y坐标用来指定该元素在其父容器中的位置。可以通过System.Windows.Controls.Primitives命名空间中的LayoutInformation静态类中的GetLayoutSlot方法来获取元素的外轮廓和其位置。举例来说,图中三角形的外轮廓的左上角坐标点为(0,0),三角形的宽和高都是200像素。所以在三角形外轮廓中,三角形的三个点的坐标分别为(100,0),(200,200),(0,200)。并不是在三角形外轮廓中的所有点在命中测试中都会成功,只有在三角形内部的点才会成功。点(0,0)不会命中,而三角形的中心(100,100)则能命中。

命中测试的结果依赖于可视化元素的布局。在目前所有的项目中,我们使用Canvas容器来包含所有可视化元素。Canvas是一个可视化的容器,能够使得开发者对可视化元素的位置进行完全控制,这一点在使用Kinect的时候尤其明显。像手部跟踪这类基本的方法也可以使用WPF中的其他容器,但是需要做很多其他工作,并且性能没有使用Canvas好。使用Cnavas容器,用户可以通过CanvasLeft 和CanvasTop显式设定其所有子元素的起始X,Y的位置。前面讨论的坐标空间转换使用Cnavas作为容器,因为不需要太多的处理操作,转换也非常明了,只需要少量的代码就可以实现较好的性能。

使用Canvas作为容器的缺点也是其的优点。由于开发者可以完全控制在Canvas中子元素的位置,所以当窗体大小发生改变或者有比较复杂的布局时,也需要开发者去更新这些可视化元素的位置。而另外一些容器控件,如Grid,StackPanel则会帮助我们实现这些更新操作。但是,这些容器控件增加了可视化树的结构和坐标空间,从而增加了命中测试的复杂度。坐标空间越多,需要的点的转换就越多。这些容器还有alignment属性(水平和垂直)和相对于FrameworkElement的margin属性,进一步增加了命中测试的计算复杂度。如果可是化元素有RenderTransforms方法的话,我们可以直接使用这些方法而不用去自己写命中测试的算法了。

一个折中的方法是,将那些基于骨骼节点位置的需要频繁变化的可视化元素,如手形图标放在Canvas容器内,而将其他UI元素放在其他容器控件内。这种布局模式需要多个坐标空间转换,会影响程序性能,并且在进行坐标空间转换计算时可能会引入一些bug。这种混合的布局方案在大多数情况下是最好的选择,它充分利用了WPF布局系统的优点。要详细了解各种容器及其命中测试的相关概念,可以参阅MSDN中WPF的布局系统。

1.2.2响应输入

命中测试只能告诉当前用户输入点是否在可视化元素的有效区间内。用户界面最重要的一个功能是要给予用户一些对输入操作的反馈。当鼠标移到一个按钮上时,我们期望按钮能够改变其外观,告诉我们这个按钮是可以点击的。如果没有这种反馈,用户不仅用户体验不好,而且还会使用户感到迷惑。有时候即使功能完备,用户体验失败意味着应用的失败。

WPF有一套功能强大的系统来通知和响应用户的输入。只要用户的输入设备是鼠标,手写笔,触摸板这些标准设备,WPF的样式和模版系统使得开发出能够响应用户输入的高度的定制化的用户界面非常容易。而Kinect的开发者有两种选择:不使用WPF系统提供的功能,手动实现所有功能,或者创建一个通用的控件来响应Kinect输入。第二种方法虽然不是特别难,但是初学者也不太容易能够实现。

了解了这一点,在下面的章节中,我们将会开发一个游戏来使用命中测试并手动响应用户的输入。在开始之前,思考一个问题,到目前位置,还有那些问题没有很好解决?使用Kinect骨骼数据和用户界面进行交互是什么意思?核心的鼠标交互有:进入,离开和点击。触摸输入交互有进入,离开,按下,弹起。鼠标只有一个触控点,触摸版可以有多个触控点,但是只有一个是主触控点。Kinect骨骼节点数据有20个可能的数据点,哪一个点是主触控点?应该有一个主控点吗?一个可视化元素,比如说按钮,会在任何一个关节点数据到达按钮的有效范围内触发,还是只是特定的关节点数,比如手,进入范围后才能触发?

没有一个回答能够完全回答好上面的问题。这取决于应用程序界面的设计及要实现的功能。这些问题其实是自然交互界面设计中的一部分典型问题。在后面我们会介绍。对于大多数Kinect应用程序,包括本文中的例子,只允许手部关节点数据才能和用户界面进行交互。最开始的交互是进入和离开。除此之外的交互可能会很复杂。在后面我们将介绍这些复杂的交互,现在让我们来看看最基本的交互。2. “我说你做”游戏

为了演示如何将Kinect作为一个输入设备,我们开始开发我们的项目:该项目使用手部关节点数据模仿鼠标或者触控板和用户界面进行交互。这个项目的目标是展示如何进行命中测试和使用WPF可视化元素来创建用户界面。项目是一个称之为“我说你做”(Simon Say)的小游戏。

“我说你做”(Simon says)是一个英国传统的儿童游戏。一般由3个或更多的人参加。其中一个人充当"Simon"。其他人必须根据情况对充当"Simon"的人宣布的命令做出不同反应。如果充当"Simon"的人以"Simon says"开头来宣布命令,则其他人必须按照命令做出相应动作。如:充当"Simon"的人说:"Simon says jump(跳)"。其他人就必须马上跳起;而如果充当"Simon"的人没有说"Simon says"而直接宣布命令,如:充当"Simon"的人说"jump"。则其他人不准有动作,如果有动作则做动作的人被淘汰出游戏。

在70年代末80年代初有一个叫Milton Bradley的游戏公司开发了一个电子版的Simon say游戏。该游戏界面由4个不同颜色(红色,蓝色,绿色,黄色) 的按钮组成,这个游戏在电脑上运行,让游戏者按演示的顺序按下这些按钮。当开始游戏时,程序首先按照一定的顺序亮起每一个按钮,游戏者必须按照这个亮灯的顺序依次按下这些按钮。如果游戏者操作正确,那么下一个亮灯序列又开始,到后面变化会越来越快,直到游戏者不能够按照给定的顺序按下这些按钮位置。

我们要做的是,使用Kinect设备来实现这么一个Simon Say游戏。这是个很好的使用Kinect展示如何和用户界面进行交互的例子。这个游戏也有一些规则。下图展示了我们将要做的用户界面,他包含四个矩形,他用来模拟游戏中的按钮。界面上方是游戏标题,中间是游戏的操作指南。

这个Kinect版的Simon says游戏追踪游戏者的手部关节。当用户的手碰到了这四个填充了颜色的方框中的任何一个时,程序认为游戏者按下了一个按钮。在Kinect应用程序中,使用悬停或者点击来和按钮进行交互很常见。现在,我们的游戏操作指南还很简单。游戏一开始,我们提示用户将手放在界面上红色矩形中手势图标所在的位置。在用户将双手放到指定位置后,界面开始发出指令。如果游戏者不能够重复这个过程,游戏将会结束,并返回到这个状态。现在,我们对这个游戏的概念,规则和样子有了一些了解,现在开始编码。

2.1 Simon say “设计一个用户界面”

首先来设计一个用户界面,下面的代码展示的主界面中的XAML和之前的连线游戏一样,我们将所有的主界面的UI元素包含在Viewbox容器中,让他来帮助我们进行不同显示器分辨率下面的缩放操作。主UI界面分辨率设置为1920*1080。UI界面共分为4个部分:标题及游戏指导,游戏界面,游戏开始界面以及用来追踪手部的手形图标。第一个TextBlock用来显示标题,游戏引导放在接下来的StackPanel元素中。这些元素是用来给游戏者提供当前游戏状态。他们没有功能性的作用,和Kinect或者骨骼追踪没有关系。

GameCanvas,ControlCanvas和HandCanvas包含了所有的和Kienct相关的UI元素,这些元素是基于当前用户手的位置和用户界面进行交互的。手的位置来自骨骼追踪。HandCanvas应该比较熟悉,程序中有两个手形图标,用来追踪游戏者两只手的运动。ControlCanvas存储的UI元素用来触发开始游戏。GameCanvas用来存储这4个矩形,在游戏中,用户需要点击这些矩形。不同的交互元素存储在不同的容器中,使得用户界面能够比较容易使用代码进行控制。比如,当用户开始游戏后,我们需要隐藏所有的ControlCanvas容器内的子元素,显然隐藏这个容器比隐藏其每个子控件容易的多。整个UI代码如下:

TextAlignment="Center" TextWrapping="Wrap" Margin="0,20,0,0" />

Height="100" Width="100" />

Height="100" Width="100" >

private void KinectDevice_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) {

using (SkeletonFrame frame = e.OpenSkeletonFrame())

{

if (frame != null)

{

frame.CopySkeletonDataTo(this.frameSkeletons);

Skeleton skeleton = GetPrimarySkeleton(this.frameSkeletons);

if (skeleton == null)

{

ChangePhase(GamePhase.GameOver);

}

else

{

LeftHandElement.Visibility = Visibility.Collapsed;

RightHandElement.Visibility = Visibility.Collapsed;

}

}

}

}

private static Skeleton GetPrimarySkeleton(Skeleton[] skeletons)

{

Skeleton skeleton = null;

if (skeletons != null)

{

//Find the closest skeleton

for (int i = 0; i < skeletons.Length; i++)

{

if (skeletons[i].TrackingState == SkeletonTrackingState.Tracked)

{

上面代码中TrackHand和GetJointPoint代码和Kinect连线游戏中相同。对于大多数游戏来说,使用“拉模型”来获取数据比使用事件模型获取数据性能要好。游戏通常是一个循环,可以手动的从骨骼数据流中获取下一帧骨骼数据。但是在我们的例子中,仍然使用的是事件模型,为的是能够减少代码量和复杂度。

2.3 Simon say “添加游戏基本元素”

Simon say游戏分成三步。起始步骤,我们之为GameOver,意味着当前没有可以玩的游戏。这是游戏的默认状态。这也是当Kinect 探测不到游戏者时所切换到的状态。然后游戏开始循环,Simon给出一些指令,然后游戏者重复执行这些指令,重复这一过程,直到用户没能够正确的执行Simon给出的指令为止。应用程序定义了一个枚举变量来描述游戏所有可能的状态,以及定义了一个变量来跟踪游戏这当前所执行了的指令位置。另外我们需要一个变量来描述游戏者成功的次数或者游戏等级。当游戏者成功的执行了Simon给出的指令后,这个变量加1。下面的代码展示了这个枚举以及变量,变量的初始化在类的够着函数中执行。

SkeletonFrameReady事件需要根据当前游戏所处的状态来执行不同的操作。下面的代码中根据当前游戏的状态执行ChangePhase,ProcessGameOver和ProcessPlayerPerforming子方法。这些方法的详细执行过程将在后面介绍。ChangePhase 方法接受一个GamePhase枚举值,后两个方法接受一个Skeleton类型的参数。

当应用程序探测不到骨骼数据时,游戏会终止,并切换到Game Over阶段。当游戏者离开Kinect视野时会发生这种情况。当游戏处在Simon给出操作步骤阶段时,隐藏界面上的手势图标。否则,更新这两个图标的位置。当游戏处在其它状态时,程序基于当前特定的游戏阶段调用特定的处理方法。

private void KinectDevice_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

{

using (SkeletonFrame frame = e.OpenSkeletonFrame())

{

if (frame != null)

{

frame.CopySkeletonDataTo(this.frameSkeletons);

Skeleton skeleton = GetPrimarySkeleton(this.frameSkeletons);

if (skeleton == null)

{

ChangePhase(GamePhase.GameOver);

}

else

{

if (this.currentPhase == GamePhase.SimonInstructing)

{

LeftHandElement.Visibility = Visibility.Collapsed;

RightHandElement.Visibility = Visibility.Collapsed;

}

else

{

TrackHand(skeleton.Joints[JointType.HandLeft], LeftHandElement, LayoutRoot);

TrackHand(skeleton.Joints[JointType.HandRight], RightHandElement, LayoutRoot);

switch (this.currentPhase)

{

case GamePhase.GameOver:

ProcessGameOver(skeleton);

break;

case GamePhase.PlayerPerforming:

ProcessPlayerPerforming(skeleton);

break;

}

}

}

}

ProcessGameOver方法的逻辑简单明了:如果游戏者的任何一只手在UI界面上的对应位置,就切换当前游戏所处的状态。GetHitTarget方法用来测试给定的关节点是否在可视化控件有效范围内。他接受关节点数据和可视化控件,返回该点所在的特定的IInputElement对象。虽然代码只有两行,但是了解背后的逻辑很重要。

命中测试算法包含三个步骤,首先需要将关节点所在的骨骼空间坐标系中坐标转换到对应的LayoutRoot元素所在的空间坐标中来。GetJointPoint实现了这个功能。其次,使用UIElement类中的TranslatePoint方法将关节点从LayoutRoot元素所在的空间坐标转换到目标元素所在的空间坐标中。最后,点和目标元素在一个坐标空间之后,调用目标元素的InputHitTest方法,方法返回目标对象树中,点所在的确切的UI元素,任何非空值都表示命中测试成功。

注意到逻辑之所以这么简单是因为我们采用的UI布局方式,应用程序假定全屏运行并且不能调整大小。将UI界面设置为静态的,确定大小能够极大的简化计算量。另外,将所有的可交互的UI元素放在Canvas容器内使得我们只有一个坐标空间。使用其他容器空间来包含元素或者使用诸如HorizonAlignment,VerticalAlignment或者Margin这些自动布局属性会增加命中测试的复杂性。简言之,越是复杂的UI布局,命中测试的逻辑越复杂,也越会影响程序的性能。

2.4.1 更改游戏状态

编译并运行程序,如果没问题的话,结果应该如下图。应用程序能够追踪手部的运动,并且当用户将手放到对应的位置后,应用程序的状态会从GameOver转到SimonInstructing状态。下一步是要实现ChangePhase方法,代码如下:

private void ChangePhase(GamePhase newPhase)

{

if (newPhase != this.currentPhase)

{

this.currentPhase = newPhase;

switch (this.currentPhase)

{

case GamePhase.GameOver:

this.currentLevel = 0;

RedBlock.Opacity = 0.2;

BlueBlock.Opacity = 0.2;

GreenBlock.Opacity = 0.2;

YellowBlock.Opacity = 0.2;

GameStateElement.Text = "GAME OVER!";

ControlCanvas.Visibility = Visibility.Visible;

GameInstructionsElement.Text = "将手放在对象上开始新的游戏。";

break;

case GamePhase.SimonInstructing:

this.currentLevel++;

GameStateElement.Text = string.Format("Level {0}", this.currentLevel);

ControlCanvas.Visibility = Visibility.Collapsed;

GameInstructionsElement.Text = "注意观察Simon的指示。";

GenerateInstructions();

DisplayInstructions();

break;

上面的代码和Kinect无关,事实上可以使用鼠标或者触控板来实现这一步,但是这段代码是必须的。ChangePhase方法用来控制UI界面来显示当前游戏状态的变化,维护一些游戏进行所需要的数据。在GameOver状态时,矩形框会渐变消失,然后改变操作指示,显示按钮来开始一个新的游戏。SimonInStructing状态不在更新UI界面讨论范围内,他调用了两个方法,用来产生指令集合(GenerateInstructions),并将这些指令显示到UI界面上(DisplayInstructions),代码中也定义了instructionPosition变量,来维护当前所完成的指令步骤。

2.4.2 显示Simon的指令

下面的代码显示了一些局部变量和GenerateInstructions方法。instructionSequence变量用来存储一系列的UIElements对象,这些对象组成了Simon的指令集合。游戏者必须用手依次移动到这些指令上。这些指令的顺序是随机设定的。每一关指令的个数和当前等级是一样的。比如,到了第五关,就有5个指令。代码也显示了DisplayInstruction方法,他创建并触发了一个故事板动画效果来根据指令的顺序来改变每一个矩形的透明度。

case 4:

this.instructionSequence[i] = YellowBlock;

break;

}

}

}

private void DisplayInstructions()

{

Storyboard instructionsSequence = new Storyboard();

DoubleAnimationUsingKeyFrames animation;

for (int i = 0; i < this.instructionSequence.Length; i++)

{

this.instructionSequence[i].ApplyAnimationClock(FrameworkElement.OpacityProperty, null);

animation = new DoubleAnimationUsingKeyFrames();

animation.FillBehavior = FillBehavior.Stop;

animation.BeginTime = TimeSpan.FromMilliseconds(i * 1500);

Storyboard.SetTarget(animation, this.instructionSequence[i]);

Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity"));

instructionsSequence.Children.Add(animation);

animation.KeyFrames.Add(new EasingDoubleKeyFrame(0.3, KeyTime.FromTimeSpan(TimeSpan.Zero)));

animation.KeyFrames.Add(new EasingDoubleKeyFrame(1,

KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(500))));

animation.KeyFrames.Add(new EasingDoubleKeyFrame(1,

KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(1000))));

animation.KeyFrames.Add(new EasingDoubleKeyFrame(0.3,

KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(1300))));

}

https://www.doczj.com/doc/5112204822.html,pleted += (s, e) => { ChangePhase(GamePhase.PlayerPerforming); };

instructionsSequence.Begin(LayoutRoot);

}

运行程序,当双手放到指定位置是,Simon游戏开始。

2.4.3 执行Simon的指令

游戏的最后一步就是根据指令来捕捉用户的动作。注意到当故事版动画完成了显示Simon的指令后,程序调用ChangePhase方法使游戏进入PlayerPerforming阶段。当在PlayerPerforming阶段时,应用程序执行ProcessPlayerPerforming方法。表面上,实现该方法很简单。逻辑是游戏者重复Simon给出的操作步骤,将手放在对应矩形上方。这和之前做的命中测试逻辑是一样的。但是,和测试两个静态的UI对象不同,我们测试指令集合中的下一个指令对应的元素。下面的代码展示的ProcessPlayerPerforming方法,编译并运行就可以看到效果了,虽然能够运行,但是它对用户非常不友好。实际上,这个游戏不能玩。我们的用户界面不完整。

private void ProcessPlayerPerforming(Skeleton skeleton)

{

//Determine if user is hitting a target and if that target is in the correct sequence.

UIElement correctTarget = this._InstructionSequence[this._InstructionPosition];

IInputElement leftTarget = GetHitTarget(skeleton.Joints[JointType.HandLeft], GameCanvas);

IInputElement rightTarget = GetHitTarget(skeleton.Joints[JointType.HandRight], GameCanvas);

if(leftTarget != null && rightTarget != null)

{

ChangePhase(GamePhase.GameOver);

}

else if(leftTarget == null && rightTarget == null)

{

//Do nothing - target found

}

else if((leftTarget == correctTarget && rightTarget == null) ||

(rightTarget == correctTarget && leftTarget == null))

{

this._InstructionPosition++;

if(this._InstructionPosition >= this._InstructionSequence.Length)

{

ChangePhase(GamePhase.SimonInstructing);

}

}

else

{

ChangePhase(GamePhase.GameOver);

}

}

上面的代码中,第一行获取目标对象元素,即指令序列中的当前指令。然后执行命中测试,获取左右手对应的命中元素。下面的代码对这三个变量进行操作。如果两只手都在UI元素上,游戏结束。我们的游戏很简单,只能允许一次点击一个矩形。当两只手都不在UI 元素上时,什么都不做。如果一只手命中了期望的对象,我们就把当前指令步骤加1。当指令集合中还有其他指令时游戏继续运行,直到完成了指令集合中的最后一个指令。当完成了最后一个指令后,游戏状态又变为了SimonInstruction状态,然后将游戏者带入下一轮游戏。直到游戏者不能重复Simon指令而进入GameOver状态。

如果游戏者动作够快,那么上面代码工作正常,因为只要用户手进入到了可视化元素有效区域,那么指令位置就会自增,游戏者在进入到下一个指令之前,没有时间来从UI元素所在的空间上移除手。这么快的速度不可能使得游戏者能够闯过第二关。当游戏者成功的闯过第二关的指令后,游戏就会突然停止。

解决这个问题的办法是在进入到下一个指令前等待,直到游戏者的手势从UI界面上清除。这使得游戏者有机会能够调整手势的位置开始进入下一条指令,我们需要记录用户的手什么时候进入和离开UI对象。

在WPF中,每一个UIElement对象都会在鼠标进入和离开其有效范围内时触发MouseEnter和MouseLeave事件。不幸的是,如前面所讨论的,WPF本身并不支持Kinect产生的关节点数据和UI的直接交互,如果当关节点进入或者离开可视化元素时能够触发诸如JointEnter和JointLeave事件,那么就简单多了。既然不支持,那么我们只有自己手动实现这个逻辑了。要实现一个可重用,优雅,

并能像鼠标那样能够在底层追踪关节点运动这样的控件不太容易并且不容易做成通用的。我们只针对我们当前遇到的问题来实现这个功能。

要修正游戏中的这个问题比较容易。我们添加一系列成员变量来保存UI元素上的哪一个鼠标手势最后悬停在上面。当用户的手经过UI元素的上方时,更新这个变量。对于每一个新的骨骼数据帧。我们检查游戏者手的位置,如果它离开了UI元素空间,那么我们处理这个UI元素。下面的代码展示了对上面ProcessPlayerPerforming方法的改进。改进的部分用粗体表示。

private IInputElement leftHandTarget;

private IInputElement rightHandTarget;

private void ProcessPlayerPerforming(Skeleton skeleton)

{

//判断用户是否手势是否在目标对象上面,且在指定中的正确顺序

UIElement correctTarget = this.instructionSequence[this.instructionPosition];

IInputElement leftTarget = GetHitTarget(skeleton.Joints[JointType.HandLeft], GameCanvas);

IInputElement rightTarget = GetHitTarget(skeleton.Joints[JointType.HandRight], GameCanvas);

bool hasTargetChange = (leftTarget != this.leftHandTarget) || (rightTarget !=

this.rightHandTarget);

if (hasTargetChange)

{

if (leftTarget != null && rightTarget != null)

{

ChangePhase(GamePhase.GameOver);

}

else if ((leftHandTarget == correctTarget && rightHandTarget == null) ||

(rightHandTarget == correctTarget && leftHandTarget == null))

{

this.instructionPosition++;

if (this.instructionPosition >= this.instructionSequence.Length)

{

ChangePhase(GamePhase.SimonInstructing);

}

}

else if (leftTarget != null || rightTarget != null)

{

//Do nothing - target found

}

else

{

ChangePhase(GamePhase.GameOver);

}

if (leftTarget != this.leftHandTarget)

{

if (this.leftHandTarget != null)

现在运行代码,由于游戏需要两只手进行操作,所以没法截图,读者可以自己下载代码运行。

2.5 需要改进的地方

这个游戏演示了如何建立一个基于Kinect进行交互的程序,虽然程序可以运行,但是仍然有一些有待改进的地方,有以下三个方面可以进行改进:用户体验,游戏内容和表现形式。

2.5.1 用户体验

基于Kinect的应用程序和游戏比较新颖,在这种应用达到成熟前,要想获得良好的用户体验需要进行很多实验和测试。我们的Simon Say游戏的用户界面就有很多值得改进的地方。Simon Say的游戏者可能会意外的触摸到游戏的区间。游戏时在游戏开始的时候,有可能会碰到开始按钮。一旦两只手都在指定的区间,游戏就开始产生指令,如果用户没有及时的放开手,他可能会无意识的碰到一个游戏对象。一个有效的解决方法是在产生指令之前,给予用户一定的时间让其重新设置手的位置。因为人们会自然而然的将手垂在身体两边。一个比较好的变通方法是简单的给一个倒计时。在不同的关卡间,也可以给这样一个时间间隔。在开始新的一关时,用户应该有时间来从可视化元素中移开手。

2.5.2 游戏内容

产生游戏指令序列的逻辑比较简单。指令序列中指令的数目和当前的关卡是一致的。每一条指令所选择的可视化元素是随机选择的。在原始的Simon Say游戏中,新一轮的游戏通常会添加一些新的指令。例如,第一关中有红的,第二关中有红的和蓝的,第三关增加

了绿的。因此在第三关指令可以是,红绿蓝。另一种改进可以不在每一关增加一个指令。而是将指令的个数设置为当前关卡数的2倍。软件开发一个有趣的地方就是应用程序可以有多种产生指令序列的算法。例如,应用程序可以分为容易,中等,难三种产生指令序列的方法供用户选择。最基本的产生指令序列的逻辑就是每一关要尽可能的比前一关要长,并且指令显示速度要以一个常量的速度显示。要增加游戏的难度,在显示指令序列时可以减少指令展示给用户的时间。

2.5.3表现形式

创建一个赋予表现力的程序远不止我们这里所介绍的这些内容。可能做一点改动就可以将我们的UI做的更加好看,比如,可以在显示指令提示,以及用户移入和离开指定区域时可以采用一些比较好看的动画。当用户执行的指令正确时,可以展现一个动画效果给予奖励。同样的,在游戏结束时也可以展现出一个动画。

3. 结语

本文围绕Kinect介绍了WPF输入系统的相关知识,并讨论了如何将Kinect作为WPF程序的输入设备与应用程序进行交互,最后展示了一个Simon say的小游戏来讲述如何进行这些实际操作。

限于篇幅,下面一篇文章将会对骨骼追踪进行进一步阐述,并对Simon say这个小游戏增加姿势识别,敬请期待。

本文所有代码点击此处下载,希望以上文章对你了解Kinect SDK有所帮助,谢谢!

PhotoShop CS3 基础教程

Adobe PhotoShop CS3 基础教程 小智 2010 年 4月 30日 本《Adobe PhotoShop CS3 基础入门教程》共分为三大部分: 1. 基础章节(1-4) 2.正式课程章节(1-10) 3.效果图制作章节(1-8) 讲解分为1+3+3=7个课时完成。 1------基础章节(1-4) 3------正式课程章节(1-10) 3------效果图制作章节(1-8) 注:课件将拷贝给大家,细心的同学会发现:可能有些内容的图片看起来不是现在版本的。对!这是PhotoShop CS和PhotoShop CS3 版本的图片在一起造成的,没有太多时间写教程,也没有太多时间抓图什么的,就用了一些以前的图片,其内容全部一样,只是在视觉效果上,新版本的要好得多,呵呵!

基础章节 基础一:PhotoShop基础 启动单击“开始-程序-Adobe Photoshop CS3”; 第一次启动会提示设置颜色,点“好”即可,如果又提示下载更新,则选“否”; 也可以直接双击桌面图标! 启动PhotoShop后会出现一个窗口,这是默认的灰色窗口,所有工作都从零开始; 我们来看一下这个窗口,这是我们创作的基础,图片处理就在这个窗口中,下面我们来看一下: 窗口的最上面是蓝色的标题栏,新建的是“无标题-1”这儿会显示我们正在处理的图片文件,一般要起一个有意义的文件名称;

标题栏下面是菜单栏,菜单是一组命令,我们操作计算机,就是向计算机提供指令,其中“文件”菜单(注:本书中所有带双引号文字都是命令选项)要求记住“存储”和“存储为”两个命令,用来保存我们的文件; “编辑”菜单中要记住“拷贝”、“粘贴”和填充命令,“窗口”菜单的“工具”和“图层”两个命令,“窗口”菜单中放着各种面板,要求记住“工具”和“图层”两个命令; 菜单栏下面是工具选项,这里放的是选中工具的各个参数,一般从左到右挨着设置就可以了; 再下面左边是工具箱,里面是各种图形处理工具,分成一栏一栏,最上边是选择类,记住第一排框选和移动工具,第二栏填充类记住画笔和渐变工具 ,文字类记住文字工具,再下面的颜色类记住上面的是前景色,下面的是背景色,工具里还有放大镜和手形双击手可以自动调整图像显示; 许多工具左下角有一个小黑角,按住鼠标会出来相似的工具,可以完成不同的功能; 在窗口右边是各个面板,各个面板可以在“窗口”菜单中打开和关闭,最常用的是最下边的第一个图层面板,默认自动会有一个“背景”图层,处于锁定状态,不让移动;

photoshop画图软件教程

位图:位图又称为点阵图,象素图和栅格图象,位图是由许多单个的点(象素或栅格)组成。位图的组成单位:象素 位图的特点:色彩丰富、效果逼真,文件宠大。 图象尺寸和图象大小 图象尺寸指的是图象的长度和宽度,也就是它的输出尺寸,一般用象素或厘米来表示 图象大小指它所占存储空间的大小,其单位用字节来表示。 二、色彩模式简介: 1、RGB模式(值范围0~255) 它是电脑中最常用的颜色模式,也是PS所默认的颜色模式 R(Red):红 G(Green):绿 B(Blue):蓝 注:R=G=B=0为黑色,R=G=B=255为白色,当三种颜色相等(除0和255)时,为不同程度的灰色。 2、CMYK模式(0~100) C(Cyan):青 M(Magenta):洋红(品红) Y(Yellow):黄 K(Black):黑 CMYK是一种印刷横式,四种颜色分别代表四种油墨,当全为0时为黑色,当全为100时为白色。 3、灰色模式(Grayscale) 在此颜色模式中只有三种颜色,黑、白、灰。 4、HSB模式 H:色相(颜色的名称) S:饱和度 B:亮度 第一部分:工具箱 一、工作界面的介绍:标题栏、菜单栏、工具选项栏、工具箱、命令调板、工作区、状态栏。 二、新建文件:1、文件菜单\新建(Ctrl+N) 2、按住Ctrl键在灰色区域快速双击 三、打开文件:1、文件\打开(Ctrl+O)

2、在灰色区域快速双击 四、保存文件:1、文件\保存 2、Ctrl+S Photoshop默认的保存格式:PSD 常用的图片格式:jpg tiff gif bmp png 注:psd格式的文件其专业性非常强,只有photoshop才能打开这种格式的文件,文体宠大,而jpg格式的文件压缩性比较强,可以在更多的软件中打开。 一、矩形、椭圆选框工具。 窗口\工作区\复位调板位置 以前景色填充对象:Alt+Del/Alt+Backspace(退格键);以背景色填充对象:Ctrl+Del/Ctrl+Backspace(退格键). 多次撤消:Ctrl+Alt+Z(默认最多可撤20步,最多为1000步) 注:填充对象时,如果此层有选区,将会填充到选区以内,如果没有选区,将会把整个图层都全部填充。 1、选择\取消选区(Ctrl+D) 2、载入选区:按住Ctrl键点击相对应的图层,即可以将此层中所有的象素载入选区。 3、在建立选区的时候,加按Space(空格)键不放,可以移动正在建立的选区。 4、按住Shift键建立选区可以建立一个正选区。 5、新选区:新画的选区将会替代以前的选区 6、添加到选区:即将几个选区加到一起; 7、从选区中减去:将老选区减去新画的选区; 8、与选区交叉:取二个选区重叠的部分。 注:在已经有一个选区情况下,按住Shift是加选,按住Alt是减选,按住Alt+shift是交选。 9、移动选区:在新选区情况下,将鼠标放在选区以内即可以移动。或者按住方向键也可以移动选区,四个方向键每按一次,移动1个象素,若按住Shift加上每按一个方向键每次移动10个象素。 10、拉出辅助线(参考线)的前提是呼出标尺, 显示标尺:Ctrl+R(视图\显示标尺) 11、在水平标尺上面可以拉出水平辅助线,垂直上拉出垂直的,若按住Alt可以水平线上拉出垂直辅助线,在垂直线上拉出水平辅助线。 12、按住Shift拉辅助线。辅助线可以对准标尺上的刻度。 13、删除辅助线:利用移动工具直接将要删除的辅助线拖到标尺以外即可, 14、一次性清除所有辅助线:视图\清除参考线 15、新建图层:ctrl+Alt+Shift+N. 16、更改辅助线的颜色:编辑\预设\参考线和网格(ctrl+K打开预设对话框)

WIN7主题制作基础教程

用VSB制作Windows 7主题基础教程 ——编写by荻野千寻子@樱茶幻萌组 ——修正by榕骑士@樱茶幻萌组【前言】 暑假到了,Mina也有空了,看着别人做的漂亮的win7主题,你是否也想“大显身手”呢?为了让大家更容易制作出自己喜欢的主题,本小组特意编写了这个教程。此教程针对的是win7主题制作的新手,以系统自带的aero主题为副本,只讲解主题制作的基础,如theme的编写、开始菜单、细节窗格等,至于樱茶不规则菜单等请参考樱茶高级教程!不过对新手来说本教程已经能让你做出个基本的主题了,如果有兴趣的话不妨跟着本教程开始你的DIY之旅吧。 OK,Let's go! 【注意】 想要DIY主题,你的系统必须为家庭高级版或以上版本,切记!【制作工具】 Photoshop、Vista/Win7 style builder (樱茶初级汉化版:https://www.doczj.com/doc/5112204822.html,/thread-119173-1-1.html) 【制作详解】 一、破解系统主题 推荐使用win7优化大师或魔方优化大师等软件,以我使用的魔方为例,对照图片

二、获取主题文件 以aero为例,从系统盘:\windows\resources\themes目录下找到aero文件夹及aero.theme文件,一起复制到某个目录下,如D:\主题制作;然后将aero文件夹与aero.theme文件一起重命名为你想要的名字,比如xx及xx.theme,再进入xx文件夹把.msstyles文件一并重命名为xx.msstyles。 三、关于.theme文件的编写(以下xx均表示你的主题名称) 用记事本方式打开xx.theme文件,对照着修改: 注:粉红字为可修改部分,蓝字为注释 ; Copyright ?Microsoft Corp.

PMAC201说明书V07

PMAC201精密配电监测单元 产品说明书V07 珠海派诺科技股份有限公司

安全注意事项 危险和警告! 本设备只能由专业人士进行安装。 对于因不遵守本说明书的说明而引起的故障,厂家将不承担任何责任。 注意事项提示! 在拆除此仪器包装后,设定或使用前,请先阅读此说明书的全部内容。对于注明为「注」的内容请额外予以关注。 本说明书不旨在包含所有细节或装置的变更,也未能提供所有与安装、运行、维护方面有关的每种可能的偶然情况。如果想得到更进一步的有关信息或本说明书中没有充分说明的购买者所需的特殊问题时,请与本公司联系。

目录 目录 第1章产品介绍 (1) 1.1产品概述 (1) 1.2产品特点 (1) 1.3产品构成 (1) 1.4 HMI人机界面 (1) 第2章产品功能和性能 (3) 2.1产品型号 (3) 2.2产品功能 (3) 2.3技术参数 (5) 2.4电磁兼容特性 (5) 2.5使用环境 (5) 第3章安装和使用 (7) 3.1主机模块结构图 (7) 3.2开关量模块结构图 (8) 3.3 CT模块结构图 (9) 3.4 HMI结构图 (9) 第4章接线端子和接线图 (11) 4.1主机模块端子 (11) 4.2开关量模块端子 (12) 4.3 HMI通讯连接 (12) 4.4 HMI电源连接 (12) 4.5 CT模块端子定义 (13) 4.6 产品典型接线图 (14) 第5章显示和操作 (15) 5.1数据显示 (15) 5.1.1实时数据显示 (15) 5.1.2开关状态显示 (15) 5.1.3报警显示 (15) 5.1.4通讯状态指示 (15) 5.1.5按键操作 (16) 5.2进线数据界面 (17) 5.3出线数据界面 (18) 5.4实时报警记录界面 (19) 5.5进线设置 (20) 5.6出线设置 (22)

让你60分钟学会Photoshop后就会画图

让你60分钟学Photoshop后就会画图的专家教程 项目1 Photoshop基础项目1-Photoshop基础1 2 3 4 项目概述任务1 Photoshop概述任务2 Photoshop工具的使用技能练习 项目概述项目描述本项目是学习Photoshop的基础,用于讲解基本概的基础,本项目是学习的基础念、练习基本技能,通过该项目的学习,应该达到对练习基本技能,通过该项目的学习,Photoshop有一个整体的、初步的认识,能简单地有一个整体的、有一个整体的初步的认识,操作Photoshop,并能使用各种工具对图像进行简操作,单的处理。单的处理。该项目共两个任务:该项目共两个任务:Photoshop概述概述Photoshop工具的使用工具的使用 项目概述该项目的基本知识要求了解图形处理的基本概念了解位图和矢量的区别了解Photoshop的核心问题了解的核心问题理解如下基本概念:像素、图像分辨率、选择与选区、图层、理解如下基本概念:像素、图像分辨率、选择与选区、图层、调板、色彩模式、滤镜、通道、蒙板、路径、形状、文字调板、色彩模式、滤镜、通道、蒙板、路径、形状、了解菜单系统掌握工作环境的设置掌握几种常用工具的使用(画笔工具、油漆桶工具、掌握几种常用工具的使用(画笔工具、油漆桶工具、橡皮擦工图章工具、其它修饰工具、调色工具、辅助工具、具、图章工具、其它修饰工具、调色工具、辅助工具、渐变工具)掌握图层、历史记录、掌握图层、历史记录、信息调板的使用方法 项目概述该项目的能力要求打开与关闭Photoshop CS 2,熟悉Photoshop CS 2的工作环境新建Photoshop 文档通过一个PSD文档,了解其中包含的内容裁剪并改变图像尺寸用选区工具选取图像的部分内容,并粘贴到其它文档中,然后将图片保存为gif格式了解Photoshop CS2的菜单系统,熟悉菜单命令的位置、快捷键掌握调板打开和关闭的方法。掌握调板位置、大小改变的方法。掌握重新组合调板的方法。观察不同调板的调板菜单,掌握调板选项的设置。通过练习了解颜色模式、通道的基本概念 项目概述通过练习了解蒙板的概念通过练习了解路径形状的概念通过练习了解滤镜的概念通过练习掌握自定义工作环境的方法画笔工具的设置规则选取工具的使用、复合选区的建立选取颜色渐变工具的使用(自定义渐变样式、径向和线性渐变填充)图层调板的使用(新建、复制、链接、编组图层)变换命令的使用 Photoshop概述概述图形与图像——Photoshop的处理对象位图与矢量图(1)什么是矢量图(2)什么是位图图像位图即点阵图,是由许多小方格式的不同色块组成的图像,其中每一个小色块称为像素(Pixel)。Photoshop 是一个位图处理软件,也就是说,所有在Photoshop中展开的图像都是由许多个小点组成。每一个小点都具有各自的色彩,若干个小点的色彩便组合成了一幅完整的图像,组成图像的小点越多,其图像越逼真。(3)像素的大小 Photoshop概述概述分辨率分辨率是用来衡量图像细节效果的一个概念。分辨率运用到不同的地方,表现出不同的形式。显示器、打印机、扫描仪等硬件设备的分辨率,用每英寸上可产生的点数,即DPI(Dots Per Inck)来表示。打印机、扫描仪处理的图像,其分辨率以每英寸上的像素,即PPI(Pixels Per Inck)来表示。分辨率是决定图像输入和输出质量高低的关键。在一个数字化图像中,图像的尺寸、分辨率和文件大小这三项之间是相互联系的。当用户决定了这三项中的任意两项,即可确定另外一项的参数:文件大小=图像尺寸×分辨率。

PS基础知识入门学习

PS基础知识入门学习 熟悉界面 打开素材中的手提袋图片,可以看到Photoshop的六大界面: 1.需要处理的图像窗口; 2.菜单栏:可以选择其中的命令以对图形进行操作; 3.左边是工具箱:其中是各种绘制图形的工具和辅助工具; 4.工具选项栏:选择绘图工具后可以在这里选择各项参数; 5.右边是各种工作面板:在其中可以对图像进行各种操作; 6.最下面是状态栏:显示了当前对图像进行操作时的各种信息。 绘图与修图技能 1. 工具的使用方法 1)工具箱是工具大体可以分为:选取工具、绘图工具、路径工具、文字工具以及其他的一 些辅助工具。不同工具的使用方法都相似,这里我们使用制作青苹果这个例子来掌握它们的使用方法,效果图如下: 2)新建一个大小600×450像素、名为“青苹果”的图像文件。

3)建立一个图层,建立圆形选区。 4)设置渐变工具。在渐变编辑器中将左端色标设置为(R16,G69,B13),再增加新色标: (R89,G128,B42)位置17%,依次增加其他新色标:(R171,G214,B76)位置36%,(R131,G185,B49)位置55%,(R82,G118,B28)位置74%,(R108,G154,B38)位置100%

5)在工具选项栏中选择径向渐变按钮,在选区中从左上方进行填充。 中选中“动态形状”、“喷枪”和“其他动态”,把“其他动态”设置如下图:

7)工具栏中设置前景色为深棕色后用画笔工具画出苹果柄。 8)用减淡工具绘制苹果的高光。在工具选项栏中选择一种画笔,设置范围为“高光”,曝光 度为“16%”,在苹果上绘制出高光部分,取消选择。 9)最后绘制出投影部分。图层选项设置如下:

原子力显微镜操作规程及注意事项

原子力显微镜操作规程及注意事项 ※※原子力显微镜属于精密且贵重大型实验仪器,操作需倍加小心※※一.开机及实验主要操作步骤: 1. 打开总电源开关。 2. 打开计算机主机以及显示器电源开关。 3. 打开控制机箱电源开关,见右图。 4. 打开HEB(Head Electronics Box)的激光开光,见下图。 5. 打开MAC Mode或AC Mode Controller电源开关,见下图。 6. 打开PicoView或者Picoscan控制软件。 7. 根据样品需要,从控制软件界面中选择合适的成像模式,mode→STM、AFM、 AC AFM、MAC 和TopMac。 8. 根据样品需要,从控制软件界面中scanner选择合适的扫描头型号(100 m和10 m)。 9. 取出扫描头,放置于扫描头基座上进行安装(注意:轻拿轻放!!!)。

10. 根据成像模式需要选择合适的nose。 11. 将nose安装在scanner上,需要双手同时垂直用力,以O型圈没入扫描头为准。 12. 用一个手将弹簧钥匙(Spring Key)放入弹簧一侧可以把弹簧翘起,另一只手 利用镊子夹起针尖安装到nose上,弹簧一般压在针尖的1/3-1/2处。

13. 安装扫描头,连接插线,并拧紧右下方紧固螺栓,此时扫描头下方出现红色激 光,建议用户放一白纸。 14. 利用扫描头上的两个螺栓上下左右调整激光的位置,使激光对在针尖背面(详 见激光调整过程)。

15. 安装样品时,确保针尖和样品之间有足够的距离,防止样品撞坏针尖。利用Close 键初步逼近样品,可以缩短针尖逼近时间。 16. 安装探测器,调整螺丝,使deflection和LFM参数满足该模式的要求。

win7旗舰版完全操作教程

一、Windows键+ 空格键“Space” [作用]:透明化所有窗口,快速查看桌面(并不切换) [快捷键]:win+空格 [小结]:当你打开了很多程序窗口的时候,这招非常有用,而且桌面还会有华丽的光影效果哦。没用过的赶紧试试先查看图片 二、Windows键+ D [作用]:最小化所有窗口,并切换到桌面,再次按又重新打开刚才的所有窗口 [快捷键]:win+d [小结]:这个功能在以前的系统里是都有的,只不过win7的显示桌面放到了任务栏的右下角了(就是最右边的那个长方形小条) 三、Windows键+ tab键 [作用]:传说中的3D桌面展示效果 [快捷键]:win+tab [小结]:记得本区应该有一个帖就是关于这个效果的,不过感觉这招最简单了 四、Windows键+ ctrl键+tab键 [作用]:3D桌面浏览并锁定(可截屏) [快捷键]:win+ctrl+tab [小结]:见识了它的效果想留个图,win+tab是办不到di,win7说了-- I can! 五、Windows键+ 数字键 [作用]:针对固定在快速启动栏中的程序,按照数字排序打开相应程序

[快捷键]:win+数字(1-9) [小结]:吼吼,这个功能爽吧 六、Windows键+ P [作用]:打开“外接显示”的设置窗口 [快捷键]:win+p [小结]:办公室一族,对这个功能肯定不会陌生吧。对了,接投影仪快速切换,嘿嘿。七、Windows键+ X [作用]:打开“移动中心”设置窗口 [快捷键]:win+x [小结]:设置窗口里包括显示器亮度控制、音量控制、笔记本电池监控、Mobile手机同步设置、外接显示器管理...等多种功能 八、修复系统默认文件关联 [作用]:修复系统默认文件关联 [快捷键]:无 [小结]:当我们无意中破坏了系统默认的文件关联,这招就派上用场了。win7下可不像winxp 那样容易修改文件关联的,不信?试试*_* [操作方法]:开始->cmd,按如下格式输入assoc.XXX=XXXfile XXX代表文件类型,比如修复TXT和BAT的文件关联,命令就是assoc.TXT=TXTfile 和assoc.BAT=BATfile 九、关闭系统休眠功能 [作用]:关闭系统休眠功能 [快捷键]:无

ps工具使用基础教程

PS工具使用入门教程 本文是介绍ps最简单的绘图方法,使学者初步认识各按键的功能 想要用好Photoshop,首先要了解Photoshop中最常用到的工具箱。Photoshop的工具箱就像是一个百宝箱,它里面提供了几乎所有能够辅助我们进行各种操作的有用的工具。 图1-1- 2 1、轻松学会基本工具的使用 工具箱中的工具大致可以分为:选择工具、绘图工具、路径工具、文字工具、切片工具以及其它类的工具,此外还有一些提供独立控制功能的按钮和选项。由于不同的工具使用起来的基本方法和原理都差不多,这里举一个简单的例子让大家对工具箱的使用有一个大致的了解,在这个例子中我们将使用“选择工具”和“绘图工具”来制作一个立体球,一起来看看怎么做的吧! 步骤1 新建一个图像文件 首先我们创建一个新的图像文件。执行【文件】|【新建】命令打开【新建图像】文件对话框,在“名称”中填入图像的“名称”为“立体球”;将“宽度”和“高度”都设置为400;分别在右边的下拉框中选择单位为“像素”;在“模式”中选择图像的色彩“模式”为我们通常使用的“RGB 颜色”模式(如图1-1-4所示)。其它为默认设置,单击【好】按钮,这样一个新的图像文件就建好 了。.

图1-1- 4 1-1- 5 步2建立一个圆形选 接着来制作一个圆形选区。选区的制作Photosho中常用到的操作,通过设定选区我可以指定对图像处理的范围如本例将要制作一个实心的圆形那么先用选区来指定这个形的范围下面我们就来看看怎样使用【椭圆选框工具来制作一个正圆选区。首先要选【椭圆选框工具在一般情况下我们可以通过鼠点击工具箱中相应的工具图标来中我们需要的工具,可是Photosho中有些工具在默认状态下是隐藏起来的,比如椭选框工具。我们可以在相应的工具图标上按鼠左键并停留一会直到弹出一个选择列(如1-1-所示),这时鼠移动到列表中相应的工具图标上点击,我们就可以选择那些被隐藏起来的工具了,效果如图1-1-7所示。 图1-1- 6 1-1- 7 图 选择好工具后将鼠标移动到图像窗口中(如图1-1-8所示),然后按住鼠标左键并拖动到图像的右下角,这时我们会看到一个随着鼠标的拖动而变化的虚线椭圆形(如图1-1-9所示),如果这时我们松开鼠标左键,一个椭圆形选区就建立起来了。由于我们需要制作的是一个正圆选区,我们可以在松开鼠标之前按住Shift键使选区成为正圆形。操作时先按住Shift键,然后松开鼠标左键,最后再松开Shift键,这样一个正圆形的选区就制作完毕了。效果如图1-1-10所示。

win7操作系统教程详解使用__绝对有用

能够使用windows7操作系统成为了许多电脑用户的一大喜悦之事,相比之前的Vista系统,windows7系统真的是好看了,快了,好用了,但你是否担心自己的windows7系统就像新安装其他Windows系统一样仅仅是刚开始运行飞快,随着使用时间的增加就会导致效率越来越低呢?想要保持自己的windows7系统一直运行如飞并非是难事,下面将介绍十个有效的小方法帮助你保持windows7的高速度,放心非常简单,老少皆宜! 1. 加快windows7系统启动速度 正在使用windows7操作系统的用户也许已经有明显感受,windows7的启动速度的确比Vista快了很多,但你想不想让它更快一些呢?来吧按照我说的做。微软windows7仅仅默认是使用一个处理器来启动系统的,但现在不少网友早就用上多核处理器的电脑了,那就不要浪费,增加用于启动的内核数量立即可以减少开机所用时间。非常简单,只需修改一点点系统设置。 首先,打开windows7开始菜单在搜索程序框中输入“msconfig”命令,打开系统配置窗口后找到“引导”选项(英文系统是Boot)。

windows7拥有强大便捷的搜索栏,记住一些常用命令,可以让你操作起来更快捷。 点击“高级选项”此时就可以看到我们将要修改的设置项了。 勾选“处理器数”和“最大内存”,看到你的电脑可选项中有多大你就可以选多大,这里所用电脑最大就支持将处理器调整到2,可能你的机器会更高

(处理器数目通常是2,4,8), 同时调大内存,确定后重启电脑生效,此时再看看系统启动时间是不是加快了。如果你想要确切知道节省的时间,可以先记录下之前开机时所用时间做详细比较。 2. 加快windows7系统关机速度 上面教大家加速windows7系统的开机,那自然关机也是可以加快速度的。虽然windows7的关机速度已经比之前的Windows XP和Vista系统快了不少,但稍微修改一下注册表你会发现关机会更迅速。 还是在windows7系统的开始菜单处的搜索框中输入“regedit”打开注册表编辑器,

计算机教程(win7-2016)资料

计算机应用基础 1.讲课进度安排:(共18次) 2.学习方法: i. 勤记忆 ii. 勤操作 iii.勤体会 3.教材及光盘的使用方法: 第一章计算机基础知识 一.概述: 1.定义:p2 2.特征: 1)外部特征:高速高集成、数字化信息、逻辑判断、存储程序 2)内部特征:快速、准确、通用、逻辑 3.发展阶段: 从计算机的器件来划分: 第一台计算机诞生于1946年,名为ENIAC。P6 第一代:电子管 1946--1957 第二代:晶体管 1958--1964 第三代:集成电路1965--1969

第四代:大规模集成电路1970-1980 第五代:智能计算机 4.应用领域:共11方面。 p9 文档和网页制作、图形/图象处理、产品和科技演示、数值和图表分析、数据管理、网络通讯教育、娱乐、帐目和财务、商业、科学计算。 二.计算机系统的组成: (一)计算机硬件系统 P4-7 硬件的定义:是指构成计算机系统的物理实体和物理装置。 1.硬件系统组成: (1)运算器 (2)控制器(运算器及控制器合称CPU) (3)内存储器(MAIN MEMORY): A.只读存储器(ROM):READ ONLY MEMORY B.随机存储器(RAM):RANDOM ACCESS MEMORY ROM、RAM之间的比较: (4)输入设备:键盘、鼠标、扫描仪、手写输入器、数码照相机、磁卡和条码读入器等。 (5)输出设备:显示器、打印机、绘图仪。 (6)外存储器:软盘、硬盘、光盘(cdrom) 2.硬件系统的常见术语解释 (1)总线系统A.数据总线DB B.地址总线AB C.控制总线CB (2)中央(微)处理器CPU :包括运算器、控制器、寄存器 intel公司奔腾 II 400 赛扬 400 AMD公司 K6-2-400 奔腾 II 450 赛扬 433 K6-2-450 奔腾 III 500 赛扬 466 K7-500(600 650)(3)微机(CPU中寄存器)的字长:寄存器所占二进制位数。 (4)微机硬件性能的主要技术指标 p18-19 A.字长(CPU中寄存器字长): 16位机:INTEL80286 32位机:INTEL80386、INTEL80486 64位机:INTEL80586 B.CPU时钟主频:单位时间内CPU所能接受的时钟脉冲数,单位是兆赫兹MHZ C.内存容量(RAM): 单位是兆字节(MB),目前常规配置有16M、32M、64M、128M 字节(BYTE):8位(BIT)二进制数构成一个存储单元叫做字节 1 KB=1024 B 1 MB=1024 KB 1 GB=1024 MB 一个汉字占用两个字节,一个3.5英寸的1.2MB磁盘可存储大约60万个汉字

PMAC教材

1.PMAC控制卡及泰道公司简介 1.1PMAC控制卡 PMAC是可编程多轴控制器(Programmable Multi-Axis Controller)的简称,是美国泰道(Delta Tau Data Systems, Inc )公司生产的功能强大的运动控制器,PMAC是目前世界上功能最强的运动控制器,同时也是当前开放式数控系统控制器的突出代表 1.2泰道公司介绍 泰道公司拥有三十多年丰富的运动控制经验,是首屈一指的创新型、高性能机器控制专家,拥有全球数百万轴的惊人控制能力;自从上世纪90年代初推出第一款基于DSP的8轴的PMAC产品,每三年左右便会推出一款新的产品,如今最新的第七代产品Power PMAC(基于Power PC)已达到惊人的256轴的控制能力。 1.3应用范围 由于其灵活的结构和开放性的编程接口,PMAC有着非常广泛的从最简单的到最复杂的应用,如半导体制造、航空、通用自动化、机器人控制、半导体生产线自动化、各类数控机床、医药设备、各种测量和定位机具、包装生产流水线自动化等等。以下是在一些公司中 1.4PMAC特性 PMAC是一台具有独立内存、独立运算操作能力的计算机,采用泰道独有的实时内核(基于DSP的卡)或实时Linux操作系统(基于Power PC的卡)通过存储在自己内部的程序进行单独的操作;它还是一台实时的、多任务的计算机,能自动对任务进行优先等级判别,先执行优先级高的任务。PMAC既可以独立工作亦可按主机的命令进行工作,它和主机的

通讯可以通过串行口也可以通过总线进行,通过总线通讯时,还可以将中断信号引入主机,从而实现非常灵活有效的控制系统。 PMAC可以通过灵活的类似Basic的高级语言(Power PMAC还可以用C语言)控制多轴运动,提供了运动控制、可编程逻辑控制、同主机交互等基本功能;并具有各种现场总线和多种反馈装置接口。 PMAC的最大特点是开放性。允许用户根据自己的用途使用内部寄存器。PMAC的编码器反馈地址、A/D和I /O与内部寄存器一样是统一编址,可以像使用PMAC其它内存一样来操作编码器反馈、A/D和I/O,使用非常方便。内部寄存器和A/D、I/O的地址既可以使用PMAC的默认值,也可以由用户重新定义,以满足不同的需要。 以下是一些基本功能: ?多轴插补联动 ?可同时运行多个运动程序和PLC程序 ?多种插补方式和S曲线加减速 ?空间任意平面刀具半径补偿 ?螺距补偿、反向间隙补偿和力矩补偿 ?高速高精度位置捕捉(25ns)和位置比较(100ns) ?G、M、T、D代码 ?电子齿轮和电子凸轮 ?运动程序旋转缓冲区 ?时基控制 1.5PMAC相关资源 1.5.1官方网址 泰道总部:https://www.doczj.com/doc/5112204822.html, 泰道中国分公司:https://www.doczj.com/doc/5112204822.html, 1.5.2手册及相关资料 所有手册:https://www.doczj.com/doc/5112204822.html,/Manuals/default.aspx 技术笔记: https://www.doczj.com/doc/5112204822.html,/common/support/technotes/technotes.asp?connectionStr=release 应用实例:https://www.doczj.com/doc/5112204822.html,/common/support/appex.asp?connectionStr=release 1.5.3技术热线和Email 请访问相关网址。 1.5.4论坛和群 论坛:https://www.doczj.com/doc/5112204822.html,/ https://www.doczj.com/doc/5112204822.html, 里的PMAC讨论区 群:QQ 114989406 2.PMAC分类及型号说明 2.1按内核功能划分 主要有Non-Turbo PMAC, Turbo PMAC,Turbo PMAC2和Power PMAC。 2.1.1Turbo PMAC和Non-Turbo PMAC的区别

PSCAD简单入门教程

PSCAD 使用说明 1.PSCAD安装 PSCAD / EMTDC常见4.0.2 ctacked版本或4、2版本,这个版本PSCAD被封装成一个ISO文档,如图1-1,可用虚拟光驱或winrar打开。下面使用winrar将其解包。 图1-1PSCAD封包形式 在系统安装了winrar3、2以上版本后,可以直接双击这个iso文档,然后点击“解压到”图标,如图1-2,就可以对其进行解包。 如图1-2 使用winrar解PSCAD的封包 解压后可以得到三个文件夹,如下图1-3所示: 图1-3

PSCAD须按以下步骤安装,否则,装好后可能不运行。另外,操作系统最好使用WinXP专业版,曾在WinXP Home版本上出现过不明原因的PSCAD不能运行情况。 安装步骤: (1)首先,运行PSCAD 4、0目录下的Setup、exe, 一路按OK或者NEXT在选择安装列表时选中“PSCAD(all Editions)”,如图1-4,不要选择License Manager与Real Time Playback (它需要硬件采集设备支持,否则只就是评估版)这两项。使用附带的EGCS/GNU Fortran77编译器就选中“GNU Fortran Compiler”,如果要使用之前自行安装的Fortran90编译器就不要选这一项。 图1-4 2、当License Manger选择对话框出现时,如图1-5,选择“I will only be using Single-user/single-machine licenses、”或“professal”这一项,随后一路OK即可。 注意:选the Student Edition 版本,模型只允许15个结点。

win7系统安装详细图文教程

系统安装方式目前有三种,分别是硬盘装系统、U盘装系统、光盘装系统。它们各有优 缺点小编就不在此累述。小编编写此篇教程的目的是为了教大家在系统没崩溃的情况下,通过硬盘安装GHOST系统的方式,实现快速装机目的。具体步骤如下: 硬盘装系统 一、系统下载完成之后,右键单击ISO镜像,弹出菜单选择解压文件; 二、解压完成,文件夹内容如下,双击打开autorun.exe文件:

三、弹出的“AUTORUN.EXE”运行界面中选择“安装GHOST系统到C盘”; 四、进入系统安装界面,如下图点选相应选项,点确认即可

五、点击取消“支持赞助商999.coom”全面复选框的勾选,然后选“是”即可; 选择“是“之后,再点选自动重启,装机过程的时间约持续5~10分钟; 选择完成,点击确定,然后选择自动重启,即可进入自动装机状态,时间约持续5~10分钟; 注意事项:1、如果自动装机完成后没有直接进入桌面,而出现了黑屏状态,毋须担心,不是系统问题,直接手动重启电脑,重启完成即可正常使用。 2、解压时请直接进行解压,不可系统存放路径不可存有中文字符,否则将无法正常安装。 3、请将解压出的gho文件放到除C盘外的分区,否则将无法正常安装;点击确定后会重新启动自动化安装,一般安装时间在5-10分钟! U盘装系统

U盘装系统是目前最常用的系统安装方式。特别适合于未安装光驱的台式机或超薄笔记本电脑上。小编为了给这类无光驱用户提供最大的便利,将在本文中为大家讲解最详细的U盘装系统教程。 您需要准备一个空的U盘(注意U盘中的重要数据请及时的备份出来,最好提前格式化U盘,U盘容量不小于4G) 第一步:1、下载大白菜U盘制作软件到你的电脑中; 2、下载GHOST系统到你的电脑中; 第二步:首先插入U盘,右键点击U盘,弹出菜单选择快速格式化(切记U盘中重要文件事先要备份出来,以防丢失),然后启动大白菜软件,界面如下图,点击界面最下方的“一键制作U盘启动”按钮,进入自动制作U盘启动盘;

PMAC600C产品说明书20080416.

珠海派诺电子有限公司?显示说明 1. PMAC600C 系列仪表采用四位数码管显示;?按键功能 C 产品说明书 PMAC600 PMAC600C 双键:进入/退出设置左键:光标移动右键:数值更改如下图:分别为电流表和电压表的典型显示界面注意:按键仅对于电流表有效?编程 CT 变比在显示界面下按住双键不放,直至进入到设置界面,松开按键。在设置界面下,左键用来移动光标,右键更改光标处的数值,当修改完毕,则按住双键不放,直至回到显示界面,松开按键,此时修改值已被保存。若有用户 CT 变比为 400/5 ,则此时应设定为 80,可按如上述说明进行操作; 1. 在显示界面下按住双键不放,直至进入到设置界面,松开按键。 3. 按左键并快速松开移动光标; 4. 按右键并快速松开修改光标对应处数值: 5.长按双键至退出编程,松开,CT 设置完毕按键仅用于修改 CT 注意:CT 最大值可以修改至 9999,出厂默认为 1。 2. 按右键并快速松开修改光标对应处数值:?注意事项 1. 当仪表采用 1A 额定输入时,CT 变比数值若超过 9999,采用 5A 额定输入时,CT 变比数值若超过 2000,则可能不能正确显示所测量数值。 2. 当显示的数值大于最大值时显示溢出标志 OVER ;电流最大值为 9999A。

珠海派诺电子有限公司 C 产品说明书 PMAC600 PMAC600C 声明:???本手册中所提供信息可不经事先通知进行修改。珠海派诺电子有限公司对所述信息保留解释权。敬请参阅:https://www.doczj.com/doc/5112204822.html, 技术咨询:159******** 售后服务:159******** 珠海派诺电子有限公司地址:珠海市唐家高新区创新一路创软科技园A3 栋邮编:519080 电话:0756-******* 3629687 传真:0756-******* 3629700

U盘安装win7系统原版安装版图文教程

安装原版Win7的方法 注意备份驱动程序 设置U盘启动教程参考地址: wenku.baidu./view/6c5d476327d3240c8447ef2a.html U盘制作教程参考地址: wenku.baidu./view/6ac2d192dd88d0d233d46a35.html?st=1 Win旗舰版下载地址: ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_67748 6.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/ 电脑店U盘工具地址:u.diannaodian./ 进PE利用虚拟光驱工具进行安装 以下安装过程是在虚拟机上完全安装的,和实际安装过程完全一样。 具体步骤: 1、先使用电脑店U盘启动盘制作工具制作完U盘启动。 注意:进入启动菜单,然后选择第十一个菜单,进入第一个PE。

2、插入U盘进入PE,先把要装系统的盘格式化一下。

3、进入第一个PE后找到我们事先准备好的win7光盘iso镜像,找到虚拟光驱工具VDM进行加载。

4、打开光盘镜像后如图所示,之后把这个程序最小化就不用管他了,现在打开“我的电脑”,是不是多了一个盘符,这就说明光盘镜像已经顺利得加载到虚拟光驱中了。下面执行光盘根目录下的 SETUP.EXE 开始安装(这个步骤,每个安装盘可能有所不同,有的就是SETUP.EXE ,也有叫做 WINNT32.BAT,也可能叫做 XP安装器之类的,本文章的例子就是SETUP.EXE)(打开SETUP.EXE安装之前注意拔掉U盘,不然文件会自动写进U盘里,无法进行下一步重启安装)。 5、双击SETUP.EXE打开,会出现安windows7安装欢迎安装窗口,点击“现在安装”。

photoshop教程视频全集—PS基础入门视频教程

免费photoshop教程视频全集—PS基础入门视频教程 Photoshop软件是UI设计学习的重要内容,学会PS软件小到自拍的修图,大到图标、网页的设计都能运用自如。许多非设计行业的人也对PS软件充满浓厚的兴趣,今天小编就给大家介绍一个PS软件基础入门的视频教程—扣丁学堂《Photoshop设计基础》。 更多课程大家可以登陆千锋教育官网可免费下载相关学习视频教程。 下面就让小编带大家领略一下这款PS基础入门视频教程都包含什么丰富的内容: 第一章:课程介绍 1-1界面介绍 1-2课程介绍 第二章:PS基础操作 2-1新建文件 2-2图层 2-3对齐与布局 2-4选区的应用

第三章:PS工具应用 3-1自由变换工具 3-2钢笔工具 3-3文字工具 3-4文字变形与路径文字 3-5画笔工具 3-6画笔面板 3-7颜色替换工具和混合器画笔工具 3-8形状与布尔运算 3-10图层样式(一) 3-11图层样式(二) 3-12图层样式(三) 分享完PS基础入门视频教程,下面小编就和大家谈谈学习PS软件的过程中要注意些什么? 第一:在学习photoshop的过程中我们要注意素材的搜集。我们都知道Photoshop是一款图像处理软件,图像图像说简单点也就是图片,我们作图需

要图片,也就是我们需要素材,像我们要做一张签名,我们需要一张背景图,还有就是做签名我们可能需要一些漂亮的字体,而我们又没有,所以这些都需要我们从网络中去下载,这里我要说一点的是我们作图过程中使用的字体与photoshop是没有关系的。 我们所有的字体都是安装的我们的操作系统中的,我们系统中默认的中文字体只有黑体、宋体、隶书和楷体等等几种字体,如果你需要其它字体,就需要自行下载安装。我这里只是举一个简单的例子,还有其他我们需要积累的如笔刷、滤镜、样式、图案等等。其实像ps笔刷、滤镜、样式、图案等等这些东西都是ps高手自己制作出来的,如果当你达到这个程度以后你就不需要积累这些了,自己动手制作就可以了。 第二:拿到一张照片,首先你千万不要去想成品文件是怎么样,有什么花边,是不是要在这个人头上加点蓝天白云什么的。我们第一个需要做的事情应该是还原真实。也就是把这张照片中不真实的东西去掉,这些东西都是设计上不需要的元素。Photoshop是个讲数学的东西。好比你只要X这个参数的值但是现在没还原真实的照片就还附加着Y参数。 如果你不做还原真实这步,那以后的所有运算都将带着Y参数Y参数这个设计上的垃圾元素会随着你图象处理步骤的增加而对图象的伤害越来越大。特别是在你执行了一些数学上不可逆的运算后你将永远不能逃避Y对最终结果的影响。例如现在有张图象偏色。如果你不先矫正色彩,直接执行了模糊这样的不可逆操作,那么以后随便你怎么调色,最终的效果都和你先矫正色彩再模糊得到的效果有很大的差距。

Windows 7系列应用教程:认识Win7的窗口

Windows 7系列应用教程:认识Win7的窗口 、玩转Win7之“开始菜单” 认识Win7的窗口 、 在WINDOWS中我们所有的程序都是运行在一个框内,在这个方框内集成了诸多的元素,而这些元素则根据各自的功能又被赋予不同名字,这个集成诸多元素的方框就叫做窗口。窗口具有通用性,大多数的窗口的基本元素都是相同的。 窗口尤其是资源管理器窗口一直是我们用来和计算机中文件打交道的重要工具,在WIN7中,窗口的几个重大改进让我们更方便的管理和搜索文件。也使得我们的以前的WINDOWS XP中的资源管理器有机融合在一起,任一窗口打开随时支持搜索,支持具体的文件管理。也使得窗口功能更为强大。 1、简单了解下窗口的结构 在对窗口进行操作之前,我们先简单了解下窗口的基本组成。下图为打开桌面上的“计算机”后显示的“计算机”窗口。我们以他为例来了解窗口。

乍看起来,WIN7 中的窗口似乎并没有太大的变化,除了我们上面所提到的“消失”的的菜单栏,不过,如果您仔细地观察一下,便会发现新的窗口带来的根本性变化。下面让我们来具体地介绍一下。 在窗口的左上角,是醒目的“前进”与“后退”按钮,——这更像之前在浏览器中的设置——而在其旁边的向下箭头则分别给出浏览的历史记录或可能的前进方向;在其右边的路径框则不仅给出当前目录的位置,其中的各项均可点击,帮助用户直接定位到相应层次,而在窗口的右上角,则是功能强大的搜索框,在这里您可以输入任何想要查询的搜索项。 在其他的工具面板则则可视作新形式的菜单,其标准配置包括“组织”等诸多选项,其中“组织”项用来进行相应的设置与操作,其他选项根据文件夹具体位置不同,在工具面板中还会出现其他的相应工具项,如浏览回收站时,会出现“清空回收站”、“还原项目”的选项;而在浏览图片目录时,则会出现“放映幻灯片”的选项;浏览音乐或视频文件目录时,相应的播放按钮则会出现。 主窗口的左侧面板由两部分组成,位于上方的是收藏夹链接,如文档、图片等,其下则是树状的目录列表,值得一提的是目录列表面板中显示的内容自动聚中,这样在浏览长文件名或

相关主题
文本预览
相关文档 最新文档