VC图像编程教案 第一章

时间:2022-12-18 20:00:21 教案 收藏本文 下载本文

VC图像编程教案 第一章(共20篇)由网友“yezhantuozhan”投稿提供,下面是小编帮大家整理后的VC图像编程教案 第一章,希望对大家带来帮助,欢迎大家分享。

VC图像编程教案 第一章

篇1:VC图像编程教案 第一章

VC图像编程教案 第一章

第一章 图像编程的基础知识与第三方DIB文件的使用方法 1.讲解图像编程的总体思路,帮助学员理解图像在计算机中的存储方式,以及为什么需要量化,颜色与灰度的概念,讲解VC图像编程的难点以及如何克服,仔细讲解第三方DIB文件的使用以及必要性。 1.1 图像编程的总体思路 1.2 图像的量化  第一章 TITLE=VC图像编程教案 第一章 TITLE=VC图像编程教案  1.3 图像的存储方法,由此学员需要上机操作 1.4 讲解View类 Frame类 Doc类的协作过程 1.5 图像的'打开过程,CFileDialog对话框的应用   CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL ); CFileDialog dialog(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, BMP (*.bmp)|*.bmp|所有文件 (*.*)|*.*||,NULL ); if(dialog.DoModal==IDOK)   { //do something... MessageBox(打开图片成功!);    } 1.6 图像文件与DIB对象的关联过程 m_address=dialog.GetPathName(); CFile file; file.Open(m_address,CFile::modeRead); m_dib.Read(&file); 1.7 图像的显示与保存过程 BYTE GetRValue( DWORD rgb ); (GetGValue,GetBValue与此相同) CDC::GetPixel  COLORREF GetPixel( int x, int y ) const; COLORREF GetPixel( POINT point ) const; 1.8 图像编程初试手平滑滤波与中值滤波去简单噪声 实验图像为: 第一章 TITLE=VC图像编程教案   平滑滤波算子模板为: 第一章 TITLE=VC图像编程教案   这两题可留为学员作业。 估计本课用时1小时40分钟。

篇2:VC图像编程教案 第四章

VC图像编程教案 第四章

设备描述表的应用及常用windows消息响应 图像编程中,难免会遇到需要绘图的问题,比如角点的标记,绘制坐标轴,文字(图像)显示等等。所以掌握一些设备描述表的应用也是很有必要的。非常详尽的关于设备描述表的讲述请参阅我空间里的`另一篇文章“关于设备描述表”。 CDC中常用的GDI函数: 绘制直线: CDC::MoveTo CDC::LineTo 绘制矩形: CDC::Rectangle 绘制圆: CDC::Ellipse 输出文字: CDC::TextOut 像素值: CDC::GetPixel CDC::SetPixel 更改设备描述表属性: CDC::SelectObject 有关设备描述表的属性类: 画笔 CPen::CPenCPen( ); CPen( int nPenStyle, int nWidth, COLORREF crColor ); throw( CResourceException ); CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL ); throw( CResourceException ); 画刷 CBrush::CBrush CBrush( ); CBrush( COLORREF crColor ); throw( CResourceException ); CBrush( int nIndex, COLORREF crColor ); throw( CResourceException ); CBrush( CBitmap* pBitmap ); throw( CResourceException ); 透明画刷声明方法: CBrush *brush; brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); 在讲解常用Windows消息响应时尝试使用这些方法。 作业: 实现一个在图像上随鼠标移动的选择框,并将选择框内的内容在点击右键时进行直方图均衡化。 第四章 TITLE=VC图像编程教案  第四章 TITLE=VC图像编程教案 

篇3:VC图像编程教案 第三章

VC图像编程教案 第三章

VC图像编程教案 第三章 3 DIB类的高级应用。 3.1 BMP文件结构 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 typedef struct tagBITMAPFILEHEADER { WORDbfType; // 位图文件的类型,必须为BM DWORD bfSize; // 位图文件的大小,以字节为单位 WORDbfReserved1;  // 位图文件保留字,必须为0 WORDbfReserved2;  // 位图文件保留字,必须为0 DWORD bfOffBits; // 位图数据的起始位置,以相对于位图 // 文件头的.偏移量表示,以字节为单位 } BITMAPFILEHEADER; BMP位图信息头数据用于说明位图的尺寸等信息。 typedef struct tagBITMAPINFOHEADER{ DWORD  biSize; // 本结构所占用字节数 LONGbiWidth;  // 位图的宽度,以像素为单位 LONGbiHeight; // 位图的高度,以像素为单位 WORD biPlanes; // 目标设备的级别,必须为1 WORD biBitCount// 每个像素所需的位数,必须是1(双色),   // 4(16色),8(256色)或24(真彩色)之一 DWORD  biCompression; // 位图压缩类型,必须是 0(不压缩),   // 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD  biSizeImage; // 位图的大小,以字节为单位 LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数 LONGbiYPelsPerMeter;  // 位图垂直分辨率,每米像素数 DWORD  biClrUsed;// 位图实际使用的颜色表中的颜色数 DWORD  biClrImportant;// 位图显示过程中重要的颜色数 } BITMAPINFOHEADER; typedef struct tagRGBQUAD { BYTErgbBlue;// 蓝色的亮度(值范围为0-255) BYTErgbGreen; // 绿色的亮度(值范围为0-255) BYTErgbRed; // 红色的亮度(值范围为0-255) BYTErgbReserved;// 保留,必须为0 } RGBQUAD; 颜色表中RGBQUAD结构数据的个数有biBitCount来确定: 当biBitCount=1,4,8时,分别有2,16,256个表项; 当biBitCount=24时,没有颜色表项。 位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; // 位图信息头 RGBQUAD  bmiColors[1];  // 颜色表 } BITMAPINFO; 3.2 DIB类的Read函数: BOOL CDib::Read(CFile* pFile) {  // 1. read file header to get size of info hdr + color table  // 2. read info hdr (to get image size) and color table  // 3. read image  // cant use bfSize in file header  Empty;  int nCount, nSize;  BITMAPFILEHEADER bmfh;  try { nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); if(nCount != sizeof(BITMAPFILEHEADER)) {  throw new CException; } if(bmfh.bfType != 0x4d42) {  throw new CException; } nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER); m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize]; m_nBmihAlloc = m_nImageAlloc = crtAlloc; nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); MakePalette(); m_lpImage = (LPBYTE) new char[m_dwSizeImage]; nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only  }  catch(CException* pe) { AfxMessageBox(Read error); pe->Delete(); return FALSE;  }  return TRUE; } 3.3 DIB类的Write函数: BOOL CDib::Write(CFile* pFile) {  BITMAPFILEHEADER bmfh;  bmfh.bfType = 0x4d42;  // BM  int nSizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;  bmfh.bfSize = 0; // bmfh.bfSize = sizeof(BITMAPFILEHEADER) + nSizeHdr + m_dwSizeImage;  // meaning of bfSize open to interpretation (bytes, words, dwords?) -- we wont use it  bmfh.bfReserved1 = bmfh.bfReserved2 = 0;  bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +  sizeof(RGBQUAD) * m_nColorTableEntries;   try { pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); pFile->Write((LPVOID) m_lpBMIH,  nSizeHdr); pFile->Write((LPVOID) m_lpImage, m_dwSizeImage);  }  catch(CException* pe) { pe->Delete(); AfxMessageBox(write error); return FALSE;  }  return TRUE; } 3.4 明确图像文件 CFile CDib类三者之间的关系 3.5 尝试直接用CDib类的m_lpImage成员读取图像数据。 3.6 尝试通过Write保存图像到另一个位置 3.7 尝试通过Write重写原图像文件(注意保存)

篇4:VC图像编程教案 第二章

VC图像编程教案 第二章

第二章 常用算子练习实验图片: 第二章 TITLE=VC图像编程教案  2.1 边缘检测算子 2.1.1 算子卷积的原理-----相当于高通滤波器 2.1.2 应用算子时边界的处理方法 2.1.3 算子模板 Roberts: 第二章 TITLE=VC图像编程教案  第二章 TITLE=VC图像编程教案  Sobel: 第二章 TITLE=VC图像编程教案 取两结果中的大值为变换结果 Priwitt: 第二章 TITLE=VC图像编程教案  Krisch: 第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案  第二章 TITLE=VC图像编程教案  第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案  第二章 TITLE=VC图像编程教案  第二章 TITLE=VC图像编程教案 第二章 TITLE=VC图像编程教案  2.2 小波算子 2.2.1 小波算子原理,高低通算子参数关系为: 第二章 TITLE=VC图像编程教案  2.2.2 Daubechies_6(DB6)算子: 第二章 TITLE=VC图像编程教案  Daubechies_8(DB8)算子: 第二章 TITLE=VC图像编程教案  2.3 SUSAN角点检测方法(作业) SUSAN算子使用的是圆形模板来进行角点探测,圆形模板有等方向性的特点。一般使用模板的半径为3~4个像元。如图 第二章 TITLE=VC图像编程教案  模板置于每一个像素,将模板的每一个像像素与中心像素进行比较。  第二章 TITLE=VC图像编程教案    其中I(r)表示r点像素的灰度值,r0表示模板中心像素。t表示一个限制阈值,这个值决定了所能检测角点的最小对比度,也是能忽略的噪声的最大容限。它主要决定了能够提取 的特征数量越小,可从对比度越低的图像中提取特征,而且提取的特征也越多。因此对于不同对比度和噪声情况的图像应取不同的t值。 现在一些研究已经可以把这个t值改进为自适应值。也就是说可以根据图像的具体所含噪声确定最好的`t值。 第二章 TITLE=VC图像编程教案  由函数n计算出所谓的USAN区域面积值。C(r0)表示以r0为中心的圆邻域。然后由一个个局部非极大值抑制模板来确定最终角点。具体可由下式表述: 第二章 TITLE=VC图像编程教案  式中g为非极大值抑制门限。门限g决定了输出角点的USAN区域的最大值。g的大小不但决定了可从图像中提取角点的多寡,它还决定了所检测到的角点的尖锐程度。所以一旦确定了所需角点的质量(尖锐程度),g就可以取一个固定不变的值。一般情况下取1/2模板像素个数,例如7×7模板的g=37/2。 实验图片为: 第二章 TITLE=VC图像编程教案  预计检测结果:好于 第二章 TITLE=VC图像编程教案  (本课用时约1小时30分)

篇5:VC图像编程教案 第五章

VC图像编程教案 第五章

5.对话框及控制的应用 5.1 先以日历控件说明控件编程的重要性 5.2 说明编写控件所需要的知识: 控件的动态生成-全局变量(类的成员变量) 自定义消息的定义与响应; (见我空间里的文章“这篇技术的文章不错”等) 5.3 一个实现加法功能的对话框程序,由此函数说明两点: 控件关联变量和关联值的区别 UpdateData函数的`用法 5.4 将刚才的程序转化的控件程序,体会控件编程的思路 GetDlgItem的用法 5.5 如何在其他程序中使用对话框

篇6:linux编程白皮书 第一章Linux

第一章硬件基础与软件基础 1.1硬件基础 操作系统必须和作为起基础的硬件系统紧密地协同工作,操作系统需要只有硬件能提供的特定服务。为了完全理解 linux 操作系统,需要了解她下层的硬件基础知识。本节将简短介绍该硬件:现在PC。 第一章硬件基础与软件基础

第一章  硬件基础与软件基础

1.1  硬件基础

操作系统必须和作为起基础的硬件系统紧密地协同工作。操作系统需要只有硬件能提供的特定服务。为了完全理解linux操作系统,需要了解她下层的硬件基础知识。本节将简短介绍该硬件:现在PC。

第一章  硬件基础与软件基础

1.1  硬件基础

操作系统必须和作为起基础的硬件系统紧密地协同工作。操作系统需要只有硬件能提供的特定服务。为了完全理解linux 操作系统,需要了解她下层的硬件基础知识。本节将简短介绍该硬件:现在PC。

当以Altair8080机器的图解作为封面的1975年1月份的《大众电子》杂志印刷时,一场“革命”开始了。家庭电子爱好者仅花397美元就可以组装出一台以早些时候的电影“星际履行”中的一个目的地而命名的Altair8080。它的Intel8080处理器和256字节的存储器而没有屏幕和键盘用今天的标准看来是多么弱小。它的发明者Ed.Roberts创造了“个人计算机”一词来描述自己的新发明,但今天PC一词被用来指几乎任何你不需帮助就可以得到的计算机。从这个定义上说,甚至一些具有强大能力的Alpa AXP系统也是PC。

狂热的 们看到Altair的潜力并开始为它写软件和建造硬件。对于这些早期的先行者来说,它代表着自由:不用在巨大的批处理大型机系统上运行和被“精英们”监视的自由。许多被这种新东西―― 一台可以放在家中厨房里桌子上的计算机迷住的大学辍学者一夜之间而暴富。许多硬件出现了,在某种程度上都不相同,而软件 很乐意为这些新机器写软件。然而IBM坚实的建造了现代PC的模型,它们1981年发布IBM  PC并于1982年早期开始销售给客户。它有Intel8088处理器,64KB内存(可扩充至256KB)、两个软盘和一个25巷80字符的彩色徒刑适配器(CGA),这在今天的标准看来仍不很强大但却销售的很好。接着是1983年的IBM  PC-XT,有了“奢侈”的10MB字节硬盘。不久,许多诸如Compaq这样的公司在一个不断增长的市场中一起竞争,PC的体系结构成为一个事实标准。这个事实标准有助于许多的硬件公司在一个不断增长的市场中一起竞争,从而保持价格很低,使消费者受益。这些早期PC的许多系统结构特征一起保持到当今的PC。例如,即使是最强大的基于Intel Pentium Pro的东西时,就选择了最普遍和合理价格的硬件,Intel80386 PC。

从PC的外面看来,最明显的不见是机箱、键盘、鼠标和图形监视器。机箱前面是一些按钮、一个数字的小显示器个一个软驱。现在的大多数系统有CD-ROM,并且如果你觉得有必要保护数据的话还可以有一台磁带驱动器做备份用。这些设备被统称做外设。

尽管CPU在总体上控制系统,它并非唯一的智能设备。所有的外设控制器,比如IDE控制器,都具有一定的智能。在PC内部,有一块主板,上面有CPU或称微处理器、内存条插槽和一些ISA或PCI外设控制器的插槽。有些控制器,如IDE磁盘控制器可以直接建在系统主板上。

1.1.1 CPU

CPU或叫微处理器,是计算机系统的心脏。微处理器通过从内存中读取指令并执行进行

计算、逻辑操作以及数据流管理。在早期计算中微处理器的功能部件是分离的 (物理上很大的)

单元。就是那时创造了中央处理单元 (Central Processing Units)的术语。现代的微处理器把这

些部件组合在蚀刻于很小的硅片上的集成电路中。 CPU、微处理器(microprocessor)、处理器

(processor)三个词在本书中通用。

微处理器操作由0和1组成的二进制数据,这些 0和1对应于电子开关的打开或关闭。如十

进制的42表示“4个10和2个1”,一个二进制数是表示 2的幂的一串二进制数。在这里幂是指

一个数乘以自身的次数。 10的1次幂(101)是10,10的2次幂(102)是10×10,10的三次幂(103)是

10×10×10,依此类推。二进制 0001是十进制 1,二进制 0010是十进制 2,二进制 0011是3,

二进制0100是4,等等。这样,十进制 42的二进制就是101010即(2+8+32或21+23+25)。在计算

机程序中通常不用二进制表示数据,而用另一种基数,十六进制表示。在这种表示下,每个

数位表示一个16的幂。因为十进制数只有 0到9,数10到15用字母A、B、C、D、E、F表示成

单个数位。例如,十六进制 E是十进制14,十六进制2A是十进制42(两个16加上10)。用C语言

的表示方法 (正如在本书通篇中所做的 ),十六进制要加前缀“ 0x”;十六进制数 2A被写作

0x2A。

微处理器可以进行算术运算,如加、减、乘、除和逻辑运算,如“ X是否比Y大?”。

处理器的执行被外部时钟所驱动。这个时钟,即系统时钟,产生规则的时钟脉冲到处理

器,而处理器在每一个时钟脉冲做一些工作。比如,处理器可以在每个时钟脉冲执行一条指

令。处理器的速度用系统时钟跳动的速度来描述。一个 100MHz的处理器每秒钟将收到 100

000 000个时钟脉冲。用时钟脉冲来描述 CPU的能力有误导性,因为不同的处理器在一个时钟

脉冲期间完成不同量的工作。但是,在其它所有东西都一样时,速度更快的时钟意味着计算

能力更强的处理器。处理器执行的指令都很简单,比如像“将存储器 X位置的内容读到Y寄存

器”。寄存器是微处理器的内部存储区,用来存储数据和在其上面执行操作。执行的操作可能

会引起停下它正在做的东西并跳转到存储器中其它地方的某条指令。这些微小的组成单元赋

予当今的微处理器几乎无穷的能力,它们能够每秒钟执行数百万条甚至上十亿条指令。

指令在执行前必须先从存储器中取出。指令自身可以引用存储器中的数据,该数据必须

被从存储器中取出并在适当的时候存回去。

微处理器内部的寄存器的大小、数量和类型完全取决于微处理器的类型。 Intel 80486处理

器和Alpha AXP处理器就有不同的寄存器集;首先, Intel的是32位宽,而Alpha AXP的是64位

宽。一般说来,任何微处理器都会有一定数量的通用寄存器和少量的专用寄存器。大多数处理器有以下的专用寄存器:

程序计数器(Program Counter,PC):该寄存器包含将被执行的下条指令的地址。每当一条

指令取出后PC的值将被自动增量。

栈指针(Stack Pointer,SP):处理器必须能够存取大量的外部随机读 /写存储器(RAM),以

存储临时数据。栈就是一种在外部存储器中方便地存储和恢复数据的方式。通常处理器有专

门指令让你把值压到栈上,并在晚些时候将它们弹出。栈工作于后进先出 (Last In First Out,

LIFO)的基础上。也就是说,如果你压两个值,即 X和Y到栈上,然后弹出一个值,将会得到

后压进的Y的值。

有些处理器的栈朝存储器顶端向上增长,而另一些朝存储器底端即基端向下增长。有的

处理器支持这两种,比如ARM。

处理器状态(Processor Status,PS):指令可能产生结果;比如“寄存器 X的值是否大于寄存

器Y的值”将产生真或假作为结果。 PS寄存器保存这种和其它的当前处理器的状态信息。例

如,大部分处理器至少有两种操作模式,核心 (或管理)模式和用户模式。 PS寄存器中保留有

识别当前操作模式的信息。

1.1.2 存储器

所有系统都有一个存储器层次结构,在这个层次结构的不同层上有不同速度和大小的存

储器。速度最快的存储器就是我们所知道的高速缓存。就像听起来的那样,它是用来暂时保

留或缓存主存储器内容的存储器。这种存储器速度很快但也很贵,所以大多数系统有少量的

片上(on-chip)缓存和稍多的系统级(板上)缓存。有的处理器用一个缓存保存指令和数据,但其

它的处理器有两个缓存,一个指令缓存和一个数据缓存。 Alpha AXP处理器就有两个内部缓

存:一个是数据的(D-Cache),一个是指令的(I-Cache)。外部缓存(B-Cache)将两者合在了一起。

最后是主存储器,相对于外部缓存来说是很慢的。相对于 CPU片上缓存,主存慢得就像爬一

样。

高速缓存和主存储器必须保持同步 (一致)。也就是说,如果主存储器的一个字保存在高速

缓存的一个或多个位置,则系统必须要保证高速缓存和主存储器的内容是相同的。高速缓存

一致性的工作一部分由硬件完成,一部分由操作系统完成,许多主要的系统任务也是这样,

要求硬件和软件紧密配合来达到目标。

1.1.3 总线

系统主板上的单个部件通过被称为总线 (bus)的许多系统连接通路相连。系统总线在逻辑

功能上分为三类:地址总线、数据总线和控制总线。地址总线用来为数据传送指明存储器位

置(地址)。数据总线保持传送的数据。数据总线是双向的,它允许数据读入到 CPU和从CPU写

出。控制总线包括各种各样的线路用来在系统中传送定时和控制信号。存在许多种总线,像

ISA和PCI就是连接外设到系统的常用总线方式。

1.1.4 控制器和外设

外设是实在的设备,像图形卡或磁盘。它们受系统主板上的控制器芯片或插到主板上的

控制器卡的控制。IDE磁盘用IDE控制器芯片控制、SCSI磁盘用SCSI磁盘控制器芯片控制等等

这些控制器通过一组总线连接到 CPU及相互连接。大部分现在制造的系统使用 PCI和ISA总线连接主要的系统部件。控制器是像 CPU一样的处理器,它们可以被看作 CPU的智能化助手。

CPU对系统整体进行控制。

所有的控制器都不相同,但通常都有一些寄存器控制它们。在 CPU上运行的软件必须能

够读写这些控制寄存器。一个寄存器可能包含描述出错状态的信息。另一个可能被用作控制

目的,来改变控制器的模式。总线上的每个控制器可以被 CPU单独寻址,这样软件的设备驱

动程序能够写到它的寄存器中以控制它。 IDE ribbon就是个很好的例子,它赋予你单独访问总

线上每个驱动器的能力。另一个不错的例子是 PCI总线,允许每个设备(如图形卡)独立地被访

问。

1.1.5 地址空间

系统中连接CPU和主存的总线与连接 CPU和系统的硬件外设的总线是分开的。硬件外设

所占用的存储器空间被总称为I/O空间。I/O空间本身可以再细分下去,但我们现在先不用考虑

那么多。CPU能够存取系统空间存储器和 I/O空间存储器,而控制器自身只有在 CPU的帮助下

间接地访问系统存储器。从设备的角度,比如软盘控制器,它只能看到自己的控制寄存器所

在的空间(ISA),而不能看到系统存储器。典型情况是, CPU有分开的指令访问存储器和I/O空

间。例如,可能有一条指令要“从 I/O地址0x3f0读一个字节到寄存器 X中。”CPU就是这样控

制系统的硬件外设―通过读写它们在I/O空间中的寄存器。在PC体系结构发展的这么多年里,

一般的外设(IDE控制器、串口、硬盘控制器等 )的寄存器在什么地方(地址)已经成为习惯。I/O

空间地址0x3f0正好是一个串口(COM1)的控制寄存器地址。

有时控制器需要直接读或写系统存储器中的大量数据,例如用户数据被写到硬盘时。在

这种情况下,直接存储器访问 (Direct Memory Aclearcase/“ target=”_blank“ >ccess,DMA)控制器将被使用以允许硬件外设

直接访问内存,但这种访问是处在 CPU的严格控制和管理之下的。

1.1.6 时钟

所有的操作系统都需要知道时间,所以当代 PC都包含一个特殊的外设叫实时时钟 (Real Time Clock,RTC)。它提供两样东西:一个可*的日期时间和一个准确的定时间隔。 RTC有自己的电池,所以当PC断电的时候它继续运行,这就是为什么你的 PC总是知道正确的日期和时间的原因。间隔定时器允许操作系统准确地调度必需的工作。

1.2 软件基础

程序是完成特定任务的计算机指令集合。程序可以用汇编,一种很低级的计算机语言写成,也可以用高级的、与机器无关的语言比如 C语言写成。操作系统是一个特殊的程序,使用户能够运行像表格或字处理这样的应用程序。本节介绍基本编程原理并给出操作系统的功能和目标的一个概述。

1.2.1 计算机语言

1. 汇编语言

CPU从主存取出并执行的指令对于人是根本不能理解的。它们是机器代码,精确地告诉

机器干什么。十六进制数0x89E5是一条Intel 80486指令,将ESP寄存器的内容拷贝到EBP寄存

器中。为最早的计算机发明的软件工具之一是汇编器,一个输入人可读的源文件并把它汇编

成机器代码的程序。汇编语言显式地处理寄存器和对数据的操作,并且它们是针对特定微处

理器的。Intel X86微处理器的汇编语言与Alpha AXP微处理器的汇编语言有很大差别。下面的

Alpha AXP汇编代码展示了一个程序可能执行的操作:

ldr r16, (r15)                            : 第一行

ldr r17, 4(r15)                            : 第二行

beq r16,r17,100                            : 第三行

str r17, (r15)                            : 第四行

100:                              : 第五行

第一个语句(第一行)从寄存器15保存的地址装载寄存器16,

下一条指令从存储器下一个位置装载寄存器17。第三行比较寄存器16和寄存器17的内容,如果它们相等,就转移到标号100。如果寄存器中的值不等则程序继续执行第 4行,将寄存器17的内容存到存储器。如果寄存器确实给相同内容则不必存储任何数据。汇编程序冗长、难写而又易于出错。 Linux内核只有很少一部分是为了高效而用汇编语言写的,那些部分是针对特定微处理器的。

2. C语言和编译器

用汇编语言写大型程序是困难而费时的工作。它很容易产生错误,并且产生的程序不可

移植,被限定在一个系列的微处理器上。使用像 C [7, C Programing Language]这样的机器无

关语言要好得多。C使得你可以用逻辑算法和操作的数据来描述程序。称为编译器的特殊程序

读进C程序并把它翻译成汇编语言,再从它产生针对特定机器的代码。好的编译器能够产生接

近优秀汇编程序员所写的那样高效的汇编指令。大部分 Linux内核是用C语言写的。下面的 C

程序片断:

if (x !- y)

x - y;

执行和前面例子的汇编代码一模一样的操作。如果变量 x的内容和变量 y的内容不相同,

那么y的内容将被拷贝到x。C语言被组织成例程,每个例程执行一件任务。例程可以返回 C语

言所支持的任何值或数据类型。像 Linux内核这样的大型程序包括许多独立的 C源程序模块,

每个模块有自己的例程和结构。这些 C源程序代码模块在一起组合成像文件系统处理这样的逻

辑功能。

C支持许多类型的变量,一个变量就是一个可以用符号名字引用的存储器位置。在上面的

片断中x和y就引用存储器的位置。程序员不管变量被放在存储器中什么地方,那是连接器

(linker)所关心的。有些变量包括不同类型的数据、整数、浮点数,还有一些是指针。

指针是包含其它变量的地址即它在存储器中位置的变量。考虑一个变量 x,可能位于内存

中地址0x80010000处。你可以有一个指针 px指向x。px可能位于内存中地址 0x80010030处。

px的值是0x80010000:x的地址。

C允许你将相关的变量捆在一起成为数据结构。例如:

struct {

int i ;

char b;

} my_struct;

是一个叫做my_struct的数据结构,它包含两个元素,一个叫 i的整数(32位数据存储)和一

个叫b的字符(8位数据存储)。

3. 连接器

连接器是一个程序,它将几个目标模块和库连接在一起形成一个单一的、一致的程序。

目标模块是编译器或汇编器输出的机器代码,包含机器可执行的代码和数据及使连接器把模块们组装在一起形成一个程序的信息。比如一个模块可能包含一个程序的所有数据库功能而另一个则包含其命令行参数处理功能。如果在一个模块中引用的例程和数据结构确实存在于另一模块中的话,连接器将安排好目标模块间的引用。 Linux内核就是由它的许多组成目标模块连接在一起形成的单一大型程序。

1.2.2 什么是操作系统

一台计算机如果没有软件只不过是一堆散发热量的电子器件。如果硬件是计算机的心脏

的话,软件就是它的灵魂。操作系统是一些允许用户运行应用程序的系统程序的集合。操作

系统抽象了系统的真实的硬件,提供给用户及其应用程序一个虚拟机器。在很大程度上,软

件体现系统的特征。大部分 PC能够运行一个或多个操作系统,每个都有不同的外观和感觉。

Linux由一些功能独立的部分组成,它们一起构成了操作系统。 Linux一个很重要的部分就是

内核本身,但是,它离开shell和库也是没有用的。

为了开始理解什么是操作系统,考虑一下你敲入一个简单的命令后发生了什么:

$ ls

Mail        c        images      perl

docs        tcl

$

$符号是注册Shell(如果是bash的话)输出的一个提示符,它意味着正在等待用户输入一些命令。键入ls,键盘驱动程序会识别出这些字符被敲入了。键盘驱动程序将它传给 Shell,由它寻找一个具有相同名字的可执行映像来处理该命令。它在 /bin/ls找到映像,然后调用内核(kernel)服务,把ls可执行映像装入虚拟内存并开始执行。 ls映像调用内核的文件子系统来查找有什么文件存在。文件系统可能使用缓存的文件系统信息或利用磁盘设备驱动程序从磁盘上读取该信息。它甚至可能引起网络驱动程序同一个远程机器交换信息以获得本系统访问的远程文件的细节(文件系统可以通过网络文件系统即 NFS远程安装)。不管该信息通过什么方式得到,ls将输出该信息,由图形驱动程序在屏幕上显示出来。

上面的这些内容看起来很复杂,但它表明即使是最简单的命令也能说明操作系统事实上是合作的功能的集合,它给予用户一个系统的一致的视图。

1. 存储器管理

在资源有限的情况下,比如存储器,操作系统需要做的很多事情就是冗余。操作系统的许多基本技巧之一就是使少量的物理存储器用起来就像许多存储器一样。这些表面上的大量存储器就是虚拟存储器。其思想是系统上运行的软件被“欺骗”,认为自己在大量存储器中运行。系统把存储器分成容易处理的页面,在运行时,把这些页面交换到内存上。因为有另一个技巧―多进程的存在,所以软件却感觉不到这一点。

2. 进程

一个进程可以被想象成一个运行的程序,每个进程都是一个运行特定程序的独立实体。

如果你查看一下Linux系统上的进程,就会发现有许多进程。例如,在机器上敲入 ps将显示下

列进程:

$ ps

PID TTY STAT    TIME COMMAND

158 pRe 1        0:00 -bash

174 pRe 1        0:00 sh /usr/X11R6/lib/bin/stattx

......

3270 pp6 03      0:00 ps

$

如果机器中有许多CPU,那么每个进程就能 (至少理论上能) 在不同的CPU上运行。不幸的是只有一个CPU,所以操作系统又得使用技巧,把每个进程依次运行一段很短的时间。这一段时间就是我们所知的时间片 (time-slice)。这个技巧叫作多进程或调度,它骗使每个进程都以为自己是唯一的进程。进程相互之间受到保护,所以当一个进程崩溃或出错时不会影响其它的进程。操作系统通过给每个进程一个独立的、只有它自己能访问的地址空间来达到这个目的。

3. 设备驱动程序

设备驱动程序构成Linux内核的主要部分。像操作系统的其它部分一样,它们在高特权的环境下操作,如果它们出错可能引起灾难。设备驱动程序管理操作系统及其控制的硬件设备之间的交互。例如,文件系统在写文件块到 1DE磁盘上时使用一个通用块设备接口。驱动程序进行细节操作和设备相关的操作。设备驱动程序针对它们驱动的特定的控制器芯片,所以如果你的系统中有一块NCR810 SCSI控制器的话,就需要有NCR810 SCSI驱动程序。

4. 文件系统

Linux像UNIX一样,系统使用逻辑上独立的文件系统而不是实际的设备标识符 (比如驱动器名或驱动器号 )来进行文件访问, Linux的每个新文件系统都被安装到根文件系统的某个目录上(比如/mnt/cdrom),这样这个新文件系统就被合并到单一的根文件系统树中。 Linux最重要的特征之一就是支持多种不同的文件系统。 Linux上最流行的文件系统是 EXT2文件系统,它也是大部分发布的Linux都支持的文件系统。

文件系统提供给用户一个系统硬盘上的文件和目录的一个合理的视图,而不管文件系统的类型和底层物理设备的特征如何。 Linux透明地支持许多不同的文件系统 (如MS-DOS和EXT2),并把所有安装的文件和文件系统表示成一个集成的虚拟文件系统。这样,一般说来,用户和进程不需要知道一个文件是哪种文件系统的一部分,而只管使用就是了。

块设备驱动程序把不同类型的物理块设备 (如IDE和SCSI)之间的差别隐藏起来,并且,对每个文件系统来说,物理设备只是数据块的线性集合。不同的设备会有不同的块大小,例如软盘通常为512字节,而IDE设备通常为1024字节;同样,这对系统的使用者是隐藏的。一个EXT2文件系统不管保存在什么设备上看起来都一样。

1.2.3 内核数据结构

操作系统必须保持许多关于系统当前状态的信息。随着系统中事件的发生,这些数据结

构也要被改变以反映当前现实。例如,当一个用户登录系统时,一个进程可能被创建。内核

必须创建一个表示这个进程的数据结构并把它链接到表示系统中其它所有进程的数据结构上。

通常这些数据结构存在于物理内存中,并且只能被内核及其子系统访问。数据结构包含

数据和指针,其它数据结构或例程的地址。

放在一起,Linux内核使用的数据结构看起来会很迷惑。每个数据结构有自己的用途。尽

管有些是被几个内核子系统使用,但它们比乍一看起来要简单得多。

理解Linux内核关键是理解它的数据结构及 Linux内核用它们所完成的功能。本书把对

Linux内核的描述建立在其数据结构的基础上。本书通过算法、完成功能的方法以及对数据结

构的使用等来讨论每个内核子系统。

1. 链表

Linux使用一些软件工程技巧来把数据结构链接在一起。在许多情况下它使用链接的

(linked)或链状的(chained)数据结构。若每个数据结构描述某个事物的单个实例或出现,内核

必须能够找到所有的实例。在链表中一个根指针包含表中第一个数据即元素的地址,而每个

数据结构包含一个指针指向表中下一个元素。最后一个元素的下一个指针为空,这意味着它

是表中的最后一个元素。双向链表包含一个指针指向表中下一个元素,同时包含一个指针指

向表中前一个元素。使用双向链表使得在表的中间添加或删除元素变得容易,尽管需要更多

访存操作。这是一个典型的操作系统折衷:以内存访问换取 CPU周期。

2. 散列表

链表是一种把数据结构链在一起的简便方法,但查找链表的效率会很低。如果你正在搜

索一个特定元素,可能看完整个表才找到所需要的。 Linux使用另一种技巧―散列(hashing)

来解除这种限制。一个散列表是一个指针的数组或向量。数组或向量就是在内存中一个换一

个的事物的简单集合。一个书架 (上的书)可以说是一个书的数组。数组通过索引来访问,索引

就是数组的偏移。进一步拿书架作类比,你可以通过它在书架上的位置来描述每本书,比如

你可能要第5本书。

散列表是数据结构指针的数组,而它的索引是通过这些数据结构中的信息导出的。如果

你用一个数据结构描述一个村子的人口,那么就可以人的年龄作为索引。为了找到一个特定

的人的数据就可以用他的年龄作为人口散列表的索引,然后沿着指针找到包含该人的细节的

数据结构。不幸的是一个村的许多人很可能具有相同的年龄,所以散列表中的指针成为指向

数据结构链或表的指针,每个数据结构描述同年龄的一个人。搜索这些短的链仍比搜索全部

数据结构快得多。

因为散列表加速了对经常使用的数据结构的访问,Linux经常使用散列表来实现高速缓存,

高速缓存是需要快速访问的信息,并且通常是可以得到的完整信息集合的一个子集。数据结

构被放进高速缓存并保留在那里,因为内核要经常访问它们。高速缓存有一个缺点就是它们

一次以文件系统注册为例,每个文件系统在注册时传给内核的数据结构包含文件系统专用例

程的地址,当文件系统被安装时,这些例程将被调用。

(持续更新中....)

原文转自:www.ltesting.net

篇7:浅析VC与MATLAB联合编程

浅析VC与MATLAB联合编程<四>

作者:邓科

在浅析VC与MATLAB联合编程<一>、浅析VC与MATLAB联合编程<二>和浅析VC与MATLAB联合编程<三>中简单介绍了VC和MATLAB接口的两种方法,初学者可能会问为什么要用VC和MATLAB接口,接口的实质又是什么,本文就通过一个例子来回答这两个问题,

浅析VC与MATLAB联合编程

首先来介绍一下MATLAB。MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成。那是20世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。

经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。

MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建。在时间进入20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。

MATLAB已经成为目前国际上最流行、应用最广泛的科学工程计算软件,它广泛的应用于自动控制、数学运算、信号分析、图象处理、财务分析等各行各业。由于它具有强大的计算和绘图功能、大量稳定可靠的算法库和简洁高效的编程语言,已成为数学计算工具方面事实上的标准。

在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把MATLAB作为内容。这几乎成了九十年代教科书与旧版书籍的区别性标志。在那里,MATLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具,

在国际学术界,MATLAB已经被确认为准确、可靠的科学计算标准软件。在许多国际一流学术刊物上(尤其是信息科学刊物)都可以看到MATLAB的应用。 在设计研究单位和工业部门,MATLAB被认作进行高效研究、开发的首选软件工具。如美国National Instruments公司信号测量、分析软件LabVIEW,Cadence公司信号和通信分析设计软件SPW等,或者直接建筑在MATLAB之上,或者以MATLAB为主要支撑。又如HP公司的VXI硬件,TM公司的DSP,Gage公司的各种硬卡、仪器等都接受MATLAB的支持。

为了说明问题,我们举个例子:解下列线形方程组:(如图1):

图1

用C语言(VC环境中)编写的代码为:(图2)

图2

编译、连接,运行结果为:(图3):

图3

而该方程在MATLAB中只需要一个命令“”就可以解决:

在MATLAB中建立一个新的m文件,在MATLAB菜单中:File->New->M file(如图4):

图4

在M文件中输入代码,并保存为QJFCZ.m。(如图5)

图5

在MATLAB Command命令窗口中输入以下命令:

>>QJFCZ

然后回车,结果如下:

x =

-0.1429

2.7857

0

>>

可以看出用MATLAB写出的代码十分简单,对于上面的方程,如果矩阵A和b的维数发生变化的话,C代码还要重新编写,而用MATLAB书写的代码几乎不用改动,只需改变数据即可。

如果现在我们用VC编写的一个软件,其中要求解有5个未知数的线形方程组,如果用C\C++语言来写程序的话其编程量是很大的,如果在C\C++语言中能用MATLAB那么简单的代码来实现该功能就可以大大减少工作量,VC和MATLAB接口就是做这个工作的。MATLAB中提供了大量用C\C++重新编写的MATLAB库函数,包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、插

篇8:浅析VC与Matlab联合编程

浅析VC与Matlab联合编程<三>

作者:邓科

在“浅析VC与Matlab联合编程<一>”和“浅析VC与Matlab联合编程<二>”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll),

浅析VC与Matlab联合编程

。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。

实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(Compponent Object Model组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。

首先在Matlab编辑器里编辑m函数文件:启动matlab->File->New->M-file函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。

图1 m函数huatu.m

在matlab下建立COM组件,步骤如下:

1、在matlab command window 输入如下命令:

>>comtool

出现com编辑界面,如图2:

图2 com组件编辑界面

2、新建工程:File->New Project…,如图3。

图2 com组件属性设置

3、设置组件属性,在”Component name“项中填写组件名称”component“,这时候会自动生成类”component“,在”Class name“项中填写类名称”huatu“,如图4,

图4 com组件属性设置1

为了便于区分,选中”Classes“中的”component“,点击“remove”按钮,将类component移除,再点击”Add>>“添加新类huatu,结果如图5,

点击”OK“,接下来出现一个对话框,选择”Yes“.

图5 com组件属性设置2

4. 添加文件:选中左边工作区的”huatu“,点击Project->Add File…,选择已经编辑好的函数文件huatu.m,如图6。需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。

图6 添加m文件

5、生成 com组件:点击Build->COM Object…,结果如图7。

图7

com组件已经由matlab做好,默认的保存位置为:matlab安装位置\work\component。

VC中调用COM组件,步骤如下:

1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。

2、面板上添加一个名为“画图”的button按钮,如图8。

图7 工程界面

3、将component_idl.h 和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。两文件默认目录为\work\component\src

4、将上面两文件加入工程:工程->添加工程->Files,选择刚刚拷到目录下的component_idl.h 和component_idl_i.c文件。

5、将目录/extern/include/下的mwcomtypes.h拷贝到工程ComHuaTu目录下,并加入到工程中,方法同上。

6、为程序添加头文件component_idl.h 、component_idl_i.c和mwcomtypes.h,结果如图9

图9 添加头文件

7、按钮画图函数添加代码:

图10 添加按钮函数代码

函数代码的意义涉及到COM,正在

篇9:VB VC混合编程疑难问题解

我们在编写VisualBasic应用程序的时候常常需要自己动手编写一些库函数或ActiveX控件,而这些函数或者控件常常采用VC 语言来写,因而也常为VB和VC两种语言之间不同参数类型、内存空间使用方法等问题为难,怎么做好呢?本文介绍了在VB和VC混合编程的情况下对这些问题的解决方法,

一、自定义类型参数向DLL库函数的传递

用VB,VC 进行混合编程时,通常需要在VB中调用VC 编写的DLL库函数,这时,一般都要遇到向库函数传递参数的问题。对于标准类型(如Double,Long等)参数,其传递比较简单,只要保证了VB中对库函数的声明和VC 中对库函数的定义在参数类型、次序和传递方式上的一致性,参数就不会被错误传递。但是,如果需要向库函数传递自定义类型的参数,情况就会变得复杂了。

情况一:自定义类型的所有成员变量都是同一种类型(例如下面的Pens自定义类型,其成员都为Long型)。

TypePens

RedPenNumAsLong

GreenPenNumAsLong

B1uePenNumAsLong

EndType

这时,只要在VB和VC 中对该结构采用相同的定义,并充分注意到VB和VC 对某些数据类型(如32,位操作系统下,VC 中的int和VB中的Integer)存储上的差异,就不会发生参数传递错误。

情况二:自定义类型中成员变量的类型不完全一致。这时,又要区分两种情况:

情况(1)没有Double型成员变量。

这时一般也不会出现参数的传递错误。

情况(2)含有Double型成员变量。

这时参数通常就会被误传。比如传递下面的Person类型的参数到VC 开发的DLL库函数,Double型成员Height的值就会在传递中丢失:

TypePerson

AgeAsLong

HeightAsDouble

EndType

造成Height值丢失的原因是由于在VC 中存储Person型变量时,将自动在Long型成员Age和Double型成员Height之间插入若干字节的分隔空间,而VB则不会。所以,VC 中存储一个Person型变量需要的内存要多于12字节,而VB只需要12个。因此,从VB传入DLL库函数的Person型变量就不能被正确接收。

解决这一问题的方法有多种,这里介绍一种比较简便和普适的,称之为“引入补位成员法”:在Person这种自定义类型中引入若干个内存补位成员,使得任一个Double型成员之前的所有成员占用的字节总数都是单个Double型变量所占字节数的整数倍(8的整数倍)。

仍以Person类型为例,由于Age成员占用4字节内存,所以要在其后引入一个占用4字节的补位成员,不妨引入一个String型的成员Tempst:

TypePerson

AgeAsLong

TempstAsString*4

HeightAsDouble

EndType

于是,Double型成员Height之前的所有成员占用的内存总数变成了8个字节,是8的整数倍。此时,将DLL库函数中对Person的定义作同样的修改后,就可以正确接收从VB传来的Person型参数了。

注意:引入补位成员时,不但要合理分配其占用的字节数,而且要正确安排其在结构体中的位置,二者缺一不可。上例中,若把补位成员放在Height之后,Doubl型变量Height之前的所有成员占用的字节总数仍然是4,不是8的整数倍。

在自己编写DLL库函数时,往往会在函数接口处使用复杂的自定义结构。在VB中调用这种函数时,采用“引入补位成员法”适当修改结构体的定义,就可以有效地避免参数传递上的错误。

二、使用在VC 中动态申请的内存

混合语言编程时,有时需要在VB代码中使用通过VC 动态申请到的内存,

这时,可以通过下述方法实现:

1)VC 中申请动态内存的DLL库函数

char*APIENTRYCreateStringBuffer(longLength)

{

char*bufV;//假设需要申请用以存放字符申的动态内存

buf=(char*)::malloc(Length);

returnbuf;//返回字符串指针,其实就是一个long型数

}

2)VB中接收动态内存指针的代码

......

DeclareFunctionCreateStringBufferLib”C:\DLLTest\Test.dll“_

(ByValLengthAsLong)AsLong

'Long型变t接收动态内存指针

......

DimslBuffer&

atBuffer=CreateStringBuffer(20)

'申请一块可存放20个字符的内存,得到指向该内存的指针

......

'使用该动态内存

......

注意:VB中使用完动态内存后,为了避免内存泄漏二要将其指针传回VC 进行内存释放工作。

三、自定义类型参数向ActiveX控件的传递

在编写VB程序时,如果使用的是标准ActiveX控件,那么一般不需要向控件传递自定义类型的参数,因为大多数控件的大多数属性都是标准类型(如Double,Long)的。但是,在混合语言编程中,当我们采用VC 中的ATL3.0模板(而不是VB)自行开发ActiveX控件时,往往希望能够向控件的某些属性或方法传递自定义类型的参数,以提高参数的传递效率。

这里介绍一种向控件传递自定义类型参数的简便方法。假设要以VB为客户端开发一个ActiveX控件AX,它有一个Student属性,类型是自定义结构Person:

TypePerson

AgeAsLong

HeightAsDouble

EndType

第一,正确编写Student属性的接口函数(以用ATL3.0模板开发AX为例)。我们将Student属性存取函数的接口参数类型写成一个long型的指针,而不再是BSTR。因为ActiveX内部的通信全部基于Unicode基础之上,所以,这样处理会避免由于字符集不匹配而造成的参数误传。相关的代码如下:

1)AX.idl中对Student属性的定义

[propget,id(0),helpstring(”propertyStudent“)]HRESULT

Student([out,retval]long*pVal);

[propput,id(0),helpstring(”propertyStudent“)]HRESULT

Student([in]longnewVal);

2)AX.h中对Student属性存取函数的定义

STDMETHOD(get_Student)(/*[out,retval]*/long*pVal);

STDMETHOD(put_Student)(/*[in]*/longnewVal);

3)AXcpp中对Student属性存取函数的实现

STDMETHODIMPCAX::get_Student(long*pVal)

{

//TODD:Addyourimplementationcodehere

//得到存储Student属性的成员变t的指针,赋给*pVal

篇10:Windows图像编程概要.net

图形设备接口(GDI,GraphicsDeviceInterface)的主要目标之一是支持在 输出设备(如视频显示器、打印机和绘图仪)上的与设备无关的图形,GDI通过将 应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无问题地在Windows 支持的任何图形输出设备上

图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在

输出设备(如视频显示器、打印机和绘图仪)上的与设备无关的图形。 GDI通过将

应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无问题地在Windows

支持的任何图形输出设备上运行。

Windows中的图形基本上是由从GDI.EXE模块中输出的函数处理的(尽管一些绘制

函数实际上具有USER.EXE的入口点),GDI.EXE模块调用在不同驱动程序文件中

的例程,其中有一个.DRV驱动程序文件用于控制显示屏幕,并且可能有一个或多

个其他的.DRV驱动程序文件用来控制打印机或绘图仪。

Windows GDI使用两种坐标系统。使用虚拟坐标系统可以使程序不依赖于具体的硬

件,使用设备坐标系统可以使程序和硬件紧密相联。

GDI含有在Windows应用程序内部执行、且与设备无关的图形操作函数,这些函数可

产生各种各样的线、正文和位图,它们可以输出到许多不同的输出设备上。GDI允

许一个应用程序产生笔、刷子、字体和位图,以供特定的输出操作使用。下面列出

GDI中几组比较常用的函数:

・设备上下文函数

・椭圆和多边形函数

・绘图工具函数

・位图函数

・绘图属性函数

・正文函救

・映射函数。

・坐标函数

・元文件(metafile)函数

・区域函数

・裁剪(clipping)函数・

窗口应用程序输出图形的操作步骤如下:

①取得指定窗口的当前显示设备上下丈,显示设备上下文实际上是一个数据结构,

它包括该窗口的参数及各种图形、文字属性的现行设定值,它们对以后的图形、

文字输 出命令起控制作用。

②选择用户坐标系及映射方式。

③设定用户坐标系中的观察窗口和设备坐标系中的显示视区。

④输出图形、文字和图象。

⑤释放所使用的显示设备上下文。

当想要在图形输出设备(例如屏幕或打印机)上绘制图形时,必须首先获得设备

上下文的句柄。先给出这个句柄,Windows才允许程序使用设备,在GDI函数中将

句柄作为一个参数传入,向Windows标明需要使用的设备。

设备上下文中包含许多属性,当GDI在不同的设备上工作时都要用到这些属性。

使用这些属性可使GDI只关心起始和终止坐标的大小,而不必关心有关对象的其

他属性,如颜色、背景等等,因为这些都是设备上下文的一部分。当需要修改

这些属性时,只需调用一个修改设备上下文中属性的参数,以后的程序中都使

用修改后的设备上下文属性。设备上下文是连接Windows应用程序、设备驱动程

序以及输出设备的纽带。

获取设备上下文句柄有多种方法。最一般的方法是当处理一条消息时获得了设备

上下文、并在退出窗口之前释放它。一般的处理方法如下:

在处理WM_PAINT消息时

case WM_PAINT:

hdc=BeginPaint(hwnd,&ps)

EndPaint (hwnd,&ps);

其数据结构为:

HDC hWnd;

PAINTSTRUCT ps;

而在windows.h中定义了PAINTSTRUCT的数据结构。

type struct tagPAINTSTRUCT {

HDC hdC;

BOOL fErase;

RECT rcPaint;

BOOL fRestore;

BOOL flncUpdate;

BYTE rgbReserved[16];

}PAINTSTRUCT;

其中,hdc用于标识显式上下文,fErase指出背景是否重画,rcPaint是涂色矩形,

其余的域均为保留。这里的hdc是BeginPaint返回的设备上下文句柄,有了从

DeginPaint获取的设备上下文句柄,就可以也只能在ps指出的rcPaint的矩形内绘

图,EndPaint调用使这一区域有效。

第二种方法如下所示,使用这种方法获取和释放设备上下文可以在整个用户区内

画图,图形在整个用户区域内都有效:

hdC=GetDc (hwnd );

…画图操作…

ReleaseDC (hwnd , hdc );

使用下面第三种方法获取和释放设备上下文,可以在整个窗口内画图,图形在整

个窗口内有效:

hdC=GetWindowDc(hwnd);

…画图操作…

ReleaseDc(hwnd,hdc);

使用下面第四种方法获取和释放设备上下文,可以在整个显示器区域内画图,图

形在整个显示器区域内部有效:

hdc=CreateDC (lpszDriver ,lpszDevice ,lpszOutput , lpData);

…画图操作…

ReleaseDC(hdc);

其中lpszDriver指向设备驱动程序的DOS文件名(不带扩展名),lpszDevice指

向专用设备名(例如Epson Fx-80),lpszOutput指向物理输出介质(文件或输

出端口)的DOS文件名或设备名,lpData指向含有设备驱动程序的设备专用的初

始化数据的DEVMODE数据结构。例如:

hdc=CreateDC(”DISPLAY“,NULL,NULL,NULL);

使用屏幕画图,而:

hdc= CreateDC (”IBMGRX“,”IBM Graphics“,”LPT1“,NULL );

在打印机上输出图形,这里的lpData置为默认值,可以在WIN.INI中找到初始化值。

如果不需要获取设备上下文,即不需要在设备上下文中操作,只需了解有关设备上

下文的信息,可以用如下语句:

hdcInfo = CreateDC (lpszDriver, lpszDevice,lpszOutput, lpData );

……

DeteteDC (hdcInfo);

另外,还可以使用设备上下文来对位图的内存进行控制,如下所示:

hdcMem = CreateCompatibleDC (hdc)

OeleteDc(hdcMem );

一个元文件是以二进制形式编码的GDI调用集合,可通过获取一个元文件设备上下文

来建立一个文件:

hdcMeta=CreateMetaFile(lpszFilename);

……

hmf=CloseMetaFile(hdCMeta);

在元文件设备上下文有效期间,使用hdcMeta所进行的任何GDI调用都成为元文件的

一部分,当调用CloseMetaFile时,设备上下文句柄变化无效,函数返回元文件(hmf)

的句柄。

一个设备上下文通常涉及物理设备,如视频显示器、打印机等,所以需要获取有

关该设备的信息,如显示器大小和彩色能力等。可以通过调用GetDeviceCaps函数

来获取这样的信息:

nValue=GetDeviceCaps (hdc,nIndex);

这里的hdc标识设备上下文,nIndex确定返回值,它可以是window.h中所定义的

28个标识符中的一个,例如nIndex=DRIVEVERSION,则该函数返回的是版本号。

真正影响在用户区域上绘制过程的设备上下文属性是“映射方式”,与映射方式

属性密切相关的还有如下四个设备上下义属性:窗口原点、视窗原点、窗口范围

和视窗范围。

Windows定义了八种映射方式。

可以调用函数setMapMode(hdc,MapMode)来设置这八种映射方式中的一种。hdc用

来标识设备上下文,nMapMode可以取MM_TEXT、MM_LOMETRIC、MM_HIMETRIC等八个值

中的一个。在设置了映射方式之后,到下一次设置映射方式之前,Windows一直使用

这种映射方式。如果想要获取当前的映射方式,可用:

nMapMode= GetMapMode (hdc)

在设置了映射方式之后,就规定了逻辑单位的大小和增量的方式,在GDI画图函数中,

可以不必考虑这些内容而直接使用逻辑数字,如:

SetMapMode(hdc ,MM_TEXT);

TextOut(hdc,8 ,16,szBuffer ,nLength)

即正文从用户区域左起第八个象素,顶边起第16个象素的位置开始写操作。不管映

射方式如何,Windows函数中所有坐标规定为-32768 到 32767之间的带符号短整救。

注意映射方式只是一个设备上下文属性,因此映射方式唯一起作用的是将映射方式作

为设备上下文句柄属性,而将该句柄当作参数的GDI函数,因此象GetSystemMetrics

这样的非GDI函数,将继续以设备单位(象素值)返回尺寸值。

用GDI的SetPixel函数可以绘制一特定颜色的象素:

rgbActualColor =SetPixel (hdc,x,y,rgbColor);

这里hdc标识设备上下文,x ,y表示点坐标,rgbColor为一无符号的长整数,其结构为:

COLORREF rgbColor;

其中低位字节为红基色的相对亮度值,第二个字节包含绿基色的相对亮度值,

第三个字节包含蓝基色的相对亮度值,高位字节必须为零。可以使用RGB函数

来获取rgbColor。

rgbColor =RGB(byRed ,byGreen,byBlue);

这里的byRed、byGreen、byBlue取值范围为0~255,分别代表红色、绿色、蓝

色的亮度。给出正确的参数之后,SetPixel返回的是调色板中最靠近所需彩色

的颜色。还可以使用如下方法来取得一个特定象素的颜色:

rgbCotor= GetPixel(hdc,x,y);

画线函数主要有三种, LineTo、Polyline 和 Arc。还有五个设备上下文属性

会影响这些函数画出的线的外观:笔的当前位置(仅对LineTo有影响)、笔、

背景方式(对非实心笔有影响)、背景颜色(对 OPAQUE背景方式)以及绘制方式。

在这些设备上下文的属性中,笔的当前位置影响画线的起点,笔影响线的粗细

等形状,背景方式影响非实心笔画出的线的模板图形,背景颜色影响线模板

背景色,绘制方式影响实心线、虚线等线属性。

以下是典型的画线操作步骤:

MoveTo(hdc,xStart,yStart);

LineTo(hdc ,xEnd ,yEnd);

上面两句画出一条从(xStart,yStart)到(xEnd,yEnd)的直线。

可以使用语句:

dwPoint = GetCurrentPosition (hdc);

获得笔的当前位置。这里,dwPoint返回值是一个无符号长整数(或双倍长

字),其中低位字含有X坐标,高位字含有Y坐标。

可以使用MAKEPOINT函数将dwPoint转换为POINT结构;

point = MAKEPOINT (dwPoint);

point的类型为POINT:

typedef struct togPOINT

int x;

int y;

}POINT;

Polyline用于绘制折线,例:

Polyline(hdc,&pt,5)

将数组pt中的5个点之间用线段相连。

Arc用于画椭圆的周边:

Arc (hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,XEnd,yEnd );

画出的椭圆以左上角为(xLeft,yTop),右下角为(xRight,yBottom)的矩

形为界,圆弧开始于椭圆和(xStart,yStart)与椭圆中心的连线的交点处,

沿着椭圆周边的过时针方向绘制,并终止于椭圆和(xEnd,yEnd)与椭圆中小

的连线的交点处。

当调用LineTo、Polyline和Arc时,Windows使用当前在设备上下文中选择的笔

来画线,笔决定了线的颜色、密度和型式,而线型可以是实线、点线或短划

(虚)线,缺省设备上下文中的笔叫做BLACK_PEN,不管映射方式如何选支笔

以一个象素的宽度画黑色的实线, BLACK_PEN是Windows提供的三支“备用笔”

之一,其他两支是WHITE_PEN和NULL_PEN,NULL_PEN是一支什么都不画的空笔,

当然用户也可以自己建立定制的笔。

可以通过一个句柄来引用所需的笔:

HPEN hPen;

hPen =GetStockObject(WHITE_PEN);

SelectObjeCt (hdc ,hPen) ;

调用GetStockObject获得一支备用笔(WHITE_PEN)的句柄,调用SelectObject

使这支笔成为设备上下文中当前选择的用CreatePen或CreatePenIndirect函数建

立一支“逻辑笔”,这逻辑笔只是一支笔的描述。

hPen = CreatePen (nPenStyle ,nWidth ,rgbColor );

其中nPenStyle参数确定笔是绘制实线还是由点或短划组成的线。该参数可取下

列标识符之一: PS_SOLID、PS_DASH、Ps_DOT、PS_DASHDOT、 PS_DASHDOT DOT。

nWidth表示笔宽(采用逻辑单位),rgbColor表示笔的颜色,如果函数执行成功,

则返回值标识一支逻辑笔,否则返回值为NULL。

另外还有一种方法来建立逻辑笔:

typedef struct tagLOGPEN

POINT lopnWidth;

COLORREF lopnColor;

}LOGPEN;

以上是Windows. h中对LOGPEN结构的定义。lopnStyle规定笔的型式,

lopnWidth规定笔的宽度,lopnColor规定笔的颜色。然后将logpen定义

为LOGPEN类型:

LOGPEN logpen;

再使用

hPen = CreatePenlndirect (&logpen);

就可以建立自定义的笔了。

因为用以上两种方式建立的笔不是设备上下文有关的,所以可以同时建立多支笔,

并用多支笔画图。

hpenl =CreatePen(PS_SOLID,1,0L);

hpen2=CreatePen(PS_SOLID,3,RGB(255,0,255)),

selectObject (hdc ,hpenl )

//LineTo调用

SelectObject (hdc , hpen2 )

//Polyline调用

DeleteObject(hpenl);

DeleteObject(hpen2);

在点线笔和短划笔的空隙间的着色取决于设备上下文中定义的背景方式和背景

颜色这两种属性。缺省的背景方式是 OPAQUE ,即用背景颜色来填充空隙,缺

省的背景颜色是白色。可用:

SetBkColor (hdc,rgbColor );

来改变填充空隙的背景颜色。可用:

SetBkMode(hdc,mode);

来改变背景方式,这里的mode可为OPAQUE或TRANSPARENT。

在设备上下文中可设置口种新的绘制方式。nDrawMode参数定义绘制方式。可用下

列函数获得当前绘制方式:

nDrowMode = GetRop2 (hdc);

使用这种绘制方式实际上是在笔的象素和目标显示表面的象素之间执行一种逐位

布尔运算。

下面列出了Windows的六个函数,用于绘制带有边框的填充区域:

Rectangle, 带有方形角的矩形

Ellipse, 椭圆

RoundRect, 带有圆形角的矩形

Chord, 在椭圆周边上的弧,其断 . 点用一条弦相连接

Pie, 在椭圆周边上的饼形楔

Polygon, 多边形

PolyPolygon, 多个多边形

图形要用设备上下文中选择的当前刷子进行填充, 例:

HBRUSH hBrush;

hBrush=GetStockObject(GRAY_BRUSH)

SelectObject (hdc,hBrush)

对于矩形填充对象,使用:

Rectangle(hdc,xLeft,yTop,xRight,yBottom);

点(xLeft,yTop)是矩形的左上角,而(xRight,yBottom)是右下角(这两

点均以逻辑坐标给出)。同时还要考虑这两点坐标的合理性,例如,在MM_TEXT

映射方式下,xRight必须大于xLeft,yBottom必须大于yTop。

对于椭圆填充对象,使用:

Ellipse(hdc,xLeft,yTop,xRight,yBottom);

画圆角矩形的填充对象,使用:

RoundRect (hdc,xLeft,yTop,xRight,yBottom,xCornerEllipse,yCornerEllipse);

rgbColor为指定刷子的前景颜色,即阴影线的颜色。

③第三种方法:

hBrush = CreatePatternBrush ( hBitmap ) ;

本函数建立一把具有由hBitmap参数指定图案的逻辑刷子,该刷子以后可被任何

支持光栅操作的设备所选用。hBitmap标识位图,该位图可用函数CreateBitmap、

CreateBitmapIndirect、LoadBitmap或CreateCompatibleBitmap创建。用于填充

图案的位图的最小尺寸为8×8。

④第四种方法:

hBrush = CreateBrushIndirect ( &logbrush )

变量logbrush为一个LOGBRUSH(“逻辑刷”)类型的结构。建立了逻辑刷子之后,

可以使用:

SelectObject (hdc , hBrush ) ;

将逻辑刷送入设备上下文中。如果使用结束,可以用:

DeletObject (hBrush ) ;

删除一把已建立的刷子,如果在程序中需要获取有关于刷子的信息,则可以调用:

GetObject (hBrush , sizeof (LOGBRUSH ) , (LPSTR ) & (logBrush ) ) ;

其中logbrush为一个LOGBRUSH类型的结构。

前面提到使用位图作为逻辑刷子的图案,这样就需要一个位图的句柄。位图必

须至少是8象素高和8象素宽,如果位图太大,Windows就取位图的左上部分作为

刷子。获取位图句柄也有四种方法。

①获取位图句柄的第一种方法是:

首先用Windows提供的SDKPAINT生成一个位图文件(扩展名为.BMP),并把文

件名包括在资源文件(.rc文件)中的一个BITMAP语句中,如:

lpszBitmap BITMAP ” BitmOPName.Bmp“

(假设SDKPAINT中产生的位图名为BitmapName.Bmp),然后将位图装入:

hBitmap = LoadBitmap (hInstance , lpszBitmap ) ;

这里hBitmap即为位图句柄,

②第二种获取位图句柄的方法是:

hBitmap= createBitmop(nWidth,nHeight ,nPlanes ,nBitsPixel,lpBits);

本函数可生成一个具有指定的宽度、高度和位图案(bit pattern)并与设备有

关的内存位图。其中的参数nWidth指定位图的宽度(以象素为单位),nHeight

指定位图的高度(也以象素为单位),nPlanes指定位图中的彩色位平面的个数,

每个彩色位平面有nWidthXnHeight XnBitsPixel位。

nBitsPixel指定每个显示象素的颜色位数。lpBits指向一个含有初始位图位值的

短整型数组,它的值与BITMAP结构中的bmBits值相类似,有关BITMAP结构的内容

已在前面

的章节中提到。

③第三种获取位图句柄的方法:

hBitmap= CreateCompatibleBitmap (hdc,nWidth,nHeight);

本函数生成一个与由hdc参数指定的设备相兼容的位图,此位图具有与其他设备

相同数值的彩色位平面或相同的每象素位数的格式。它的彩色信息同样由hdc指

定的设备所确定。hdc标识设备上下文,nWidth和nHeight分别指定位图的宽和高

(以位数表示)。

④第四种获取位图句柄的方法:

hBitmop = CreateBitmapIndirect (&bitmap):

本函数生成一个具有由lpBitmap参数所指定的数据结构给出的宽度、高度和位

图图案的位图。这里的bitmap的结构为BITMAP类型。

当拥有一个位图句柄之后,还可以调用:

GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bitmap);

来获得有关位图的信息,这里返回的bitmap为一个BITMAP类型的结构。

还可以调用:

GetBitmapBits (hBitmap,dwCount,lpBits);

将位图hBitmap的dwCount个字节复制到地址为lpBits的数组中。同样还可以使用

SetBitmopBits (hBitmap,dwCount,lpBits);

将 lpBits 标识的彩色位值放置到 hBitmap 标识的位图中去。

当Windows用刷子填充一个区域时,它在水平和垂直两个方向上重复地使用8×8

位图,刷子的外观可能会有细微的变化,这取决于Windows如何将位图的左上角

与显示表面对齐,设备上下文中将这种对齐的属性称为“刷子原点”。

大多数情况下,绘图时不必如此精细地调整刷子原点;但在某种情况下,为了产

生某种特定的视觉效果,需要这么做。可以通过下面步骤来达到这个效果:

①对刷子调用UnrealizeObject(但不能对备用刷子调用UnrealizeObject);

UnrealizeObject(hObject );

此函数表示GDI在下次给定的刷子被选中时,使它的原点复位。

②用SetBrushOrg设置刷子原点:

BrushOrg=SetBrushOrg(hDc,x ,y);。

此函数用于设置当前选人给定的设备上下文中的刷子的原点。其中,hDc标识设

备上下文,x规定新原点的x 坐标(采用设备坐标),该值范围必须在0~7之间,

y规定新原点的y坐标(采用设备坐标),该值范围必须在0~7之间,该函数返回

一个双字,先前的x坐标放在低位字,先前的y坐标放在高位字。

除了画点、画线、区域填充这些绘图函数之外,Windows还包括几个附加的绘

图函数,用以处理RECT(矩形)结构和“区域”,区域是屏幕的一个由矩形、

其他多边形和椭圆组合而成的部分。

FillRect(hdc ,&rect,hBrush);

此函数是用选定的刷子填充给定的矩形,FillRect函数填充整个矩形,还包括

左边线和顶边线,但不包括右边线和底边线。hdc标识设备上下文,rect为RECT

数据结构类型,此数据结构存放要填充的矩形的逻辑坐标。hBrush用来标识填充

此矩形的刷子。

FrameRect (hdc ,&rect);

本函数在 lpRect 参数指定的矩形周围画出一个边框,FrameRect 函数采用给定

的刷子绘制边框,边框的高和宽总是用逻辑单位表示。hdc标识窗口的设备上下

文, rect 标明左上角和右下角的逻辑坐标,hBrush标识画矩形边框用的刷子。

InvertRect (hdc,&rect);

该函数反视频显示给定矩形的内容。

前面提到的rect可用以下语句取得:

SetRect(&rect,xLeft,yTop,xRight,yBottom);

区域用以描述显示器上的一个由矩形、其他多边形和椭圆组合而成的部分、可以

用区域进行绘制或裁剪。

可用:

hRgn=CreateRgn(xLeft,yTop,xRight,yBottom);

hRgn = CreateRectRgnIndirect (&rect );

来建立矩形区域,也可以用:

hRgn= CreatEllipseRgn (xLeft,yTop,xRight,yBOttom);

或:

hRgn =CreateEllipseRgnIndirect (&rect);

来建立椭圆形区域;还可以用:

hRgn=CreatePolygonRgn (Upoint,nCount,nPolyFillMode);

来建立多边形区域,用:

hRgn=CreateRoundRectRgn(xl,yl,x2,y2,x3,y3);

来建立一个带有圆角的矩形区域,(xl,y1)表示区域左上角,(x2,y2)表示

区域右下角,x3和y3分别用于指定产生圆角的椭圆的宽度和高度。

各个特定区域的句柄产生之后,

还可以使用:

nRgnType= CombineRgn (hDestRgn,hSrcRgnl,hSrcRgn2,nCombine);

通过组合两个已存在区域而产生一个新的区域。组合区域的方法由nCombine参数

加以说明:

这里的hSrcRgnl和hSrcRgn2标识两个已存在的区域,hDestRgn标识将被新区域替

换的作为目标的已存在区域。

一个区域用完后,可用DeleteObject(hRgn)删除它。

FloodFiLL (hdc,xStart,yStart,rgbColor);

本函数用当前刷子填充显示表面的一个区域,该区域假定由rgbColor多数指定的

颜色边界确定,FloodFill函数由xStart,yStart参数指定的,点开始向各个方向

进行填充,直到颜色边界为止。

ExtFLoodFill(hdc,xStart,yStart,rgbColor,wFill );

此函数用当前刷子填充显示表面上的某一区域,若wFill被设置成FLOODFILLBORDER,

此区域将完全用rgbColor设定的颜色作为边界,ExtFloodFill从(xStart,yStart)

点开始向各个方向填充,直到该颜色边界为止。若wFill被设置成FLOODFILLSURFACE,

则ExtFLOODFILL函数从(xStart,yStart)点开始,向各个方向对所有包含由

rgbColor参数设定的颜色的相邻区域进行填充。

DrowIcon(hdc,xStort,yStart,hIcon) ;

本函数在指定设备上画一个图标。(xStart,yStart)为图标的左上角,hIcon标

识要画的图标,它与hBitmap一样,可以由SDKPAINT画出,在. rc文件中定义,

用LoadIcon获得。

ScrollWindow (hwnd,xScroll,yScroll,&rectScroll,&rectClip) ;

本函数通过移动一个窗口用户区域的内容来滚动该窗口,沿X轴移动xScroll个单位,

沿Y轴移动yScroll个单位,rectScroll表示用户区域要滚动的那一部分内容,

rectClip表示要滚动的裁剪矩形。

ScrollDC(hdc,dx,dy,lprcScroll,lprcClip, hrgnUpdate,lprcUpdate);

此函数水平地和垂直地滚动由位构成的矩形。lprcScroll指向要滚动的矩形,

dx表示水平滚动单位,dy表示垂直滚动单位,lprcClip指向裁剪矩形,hrgnUpdate

返回滚动过程没有覆盖的区域,lprcUpdate返回需要重画的最大矩形区域。

OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家 世

界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享

的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公

司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL 为基础开发

出自己的产品,其中比较著名的产品包括动画制作软件Soft Image 和3D Studio MAX、

仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软

ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows NT和最新的Windows 95

中提供了OpenGL标准及OpenGL三维图形加速卡(如北京黎明电子技术公司的AGC-3D

系列三维图形加速卡)的推出,OpenGL将在微机中有广泛地应用,同时也为广大用

户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。

OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它

为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++

紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性。

OpenGL使用简便,效率高。它具有七大功能:

1) 建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了

复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面 (如Bezier、

Nurbs等曲线或曲面)绘制函数。

2) 变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、

变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。

其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时

间,提高三维图形的显示速度。

3) 颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。

4) 光照和材质设置OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、

漫反射光(Diffuse Light)和镜面光(Specular Light)。

材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红

绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。

5) 纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表达

物体表面细节。

6) 位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提供融合

(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。

以上这三条可使被仿真物更具真实感,增强图形显示的效果。

7) 双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,简而言之,

后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。

此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等

特殊效果。从而实现了消隐算法。

OpenGL图形库一共有100多个函数。其中核心函数有115个,它们是最基本的函数,

其前缀是gl,OpenGL实用库(OpenGL utility library , GLU)的函数功能更高

一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀

为glu;OpenGL辅助库(OpenGL auxiliary library ,GLAUX)的函数是一些特殊

的函数,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,

共有31个,前缀为aux。

此外,还有六个WGL函数非常重要,专门用于OpenGL和Windows 95窗口系统的联接,

其前缀为wgl,主要用于创建和选择图形操作描述表(rendering contexts)以及在

窗口内任一位置显示字符位图。这些功能是Windows 95 对OpenGL的唯一补充。

另外,还有五个Win32函数用来处理像素格式(pixel formats)和双缓存。由于它

们是对Win32系统的扩展,因此不能应用在其它OpenGL平台上。

OpenGL for Windows 95的设计与OpenGL forUNIX的程序设计有一点小区别,关

键就在于如何将OpenGL与不同的操作系统下的窗口系统联系起来。

如果调用OpenGL辅助库窗口管理函数,则不用考虑这些问题。下面简要介绍在

Windows 95下 OpenGL 的程序设计关键。

1.图形操作描述

在Windows 95下窗口程序必须首先处理设备描述表(Device Contexts ,DC),

DC包括许多如何在窗口上显示图形的信息,既指定画笔和刷子的颜色,设置绘

图模式、调色板、映射模式以及其它图形属性。同样,OpenGL for Windows 95

的程序也必须使用DC,这与其它Windows 95程序类似。但是,OpenGL for

Windows 95必须处理特殊的DC图形操作描述表,这是DC中专为OpenGL使用的一

种。一个OpenGL应用图形操作描述表内有OpenGL与Windows 95窗口系统相关的各

种信息。一个OpenGL应用首先必须创建一个图形操作描述表,然后再启动它,最

后在所定义的窗口内按常规方式调用OpenGL函数绘制图形。

一个图形操作描述表不同于其它DC,它们调用每个GDI函数都需要一个句柄,而图

形操作描述表方式下只需一个句柄就可以任意调用OpenGL函数。也就是说,只要

当前启用了某个图形操作描述表,那么在未删除图形操作描述表之前可以调用任

何OpenGL函数,进行各种操作。

2.像素格式

在创建一个图形操作表之前,首先必须设置像素格式。像素格式含有设备绘图界

面的属性,这些属性包括绘图界面是用RGBA模式还是颜色表模式,像素缓存是用

单缓存还是双缓存,以及颜色位数、深度缓存和模板缓存所用的位数,还有其它

一些属性信息。

3.像素格式结构

每个OpenGL显示设备都支持一种指定的像素格式。一般用一个名为

PIXELFORMATDESCRIPTOR的结构来表示某个特殊的像素格式,这个结构包含26个

属性信息。Win32定义PIXELFORMATDESCRIPTOR如下所示:

typedef struct tagPIXELFORMATDESCRIPTOR

// pfd

WORD nSize;

WORD nVersion;

DWORD dwFlags;

BYTE iPixelType;

BYTE cColorBits;

BYTE cRedBits;

BYTE cRedShift;

BYTE cGreenBits;

BYTE cGreenShift;

BYTE cBlueBits;

BYTE cBlueShift;

BYTE cAlphaBits;

BYTE cAlphaShift;

BYTE cAclearcase/” target=“_blank” >ccumBits;

BYTE cAccumRedBits;

BYTE cAccumGreenBits;

BYTE cAccumBlueBits;

BYTE cAccumAlphaBits;

BYTE cDepthBits;

BYTE cStencilBits;

BYTE cAuxBuffers;

BYTE iLayerType;

BYTE bReserved;

DWORD dwLayerMask;

DWORD dwVisibleMask;

DWORD dwDamageMask;

} PIXELFORMATDESCRIPTOR;

4.初始化PIXELFORMATDESCRIPTOR结构

PIXELFORMATDESCRIPTOR中每个变量值的具体含义和设置可以参考有关资料,

下面举出一个PIXELFORMATDESCRIPTOR初始化例子来简要说明相关变量的意义。

定义PIXELFORMATDESCRIPTOR结构的pfd如下:

PIXELFORMATDESCRIPTOR pfd =

sizeof(PIXELFORMATDESCRIPTOR), . //size of this pfd 1

PFD_DRAW_TO_WINDOW| // support window

PFD_SUPPORT_OPENGL| // support OpenGL

PFD_DOUBLEBUFFER, // double buffered

PFD_TYPE_RGBA, // RGBA type

24, // 24-bit color depth

0,0,0,0,0,0, // color bits ignored

0, // no alpha buffer

0, // shift bit ignored

0, // no accumulation buff

0,0,0,0, // accum bits ignored

32, // 32-bit z-buffer

0, // no stencil buffer

0, // no auxiliary buffer

PFD_MAIN_PLANE, // main layer

0, // reserved

0,0,0 // layer masks ignored

};

在这个结构里,前两个变量的含义十分明显。第三个变量dwFlags的值是

PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL ,

表明应用程序使用OpenGL函数来绘制窗

原文转自:www.ltesting.net

篇11:初三化学第一章教案

命题落点

1.能从原子的角度描述物质的构成,

2.能从粒子的角度分析化学变化的实质,

3.能用原子的观点解释日常生活中的一些现象和实验事实,

4.从典型实例出发,确认原子的真实存在,去探究粒子的性质等,

5.计算原子中质子数、中子数、电子数以及相对原子质量之间的数量关系。

课题2 元素

命题落点

1.利用元素这一宏观概念,去正确描述物质的组成或成分,

2.考查元素符号所表示的意义,

3.命题时往往给出元素周期表或部分内容,要求根据元素周期表中的递变规律,去推测一些未知元素的结构和性质,或发现一些规律。

4.通常给出常见物质名称、俗名、图形或其他信息,根据组成物质中元素的种类,来判断物质所属的类别。

课题3 离子

命题落点

1.利用粒子中质子数、电子数的关系去判断粒子种类,

2.根据原子的结构来判断或推测元素相关的化学性质,

3.能从离子的角度描述物质的构成,能用粒子的观点解释一些现象和实验事实。

课题4 化学式与化合价

命题落点

1.命题时常给出化合价写出相应的化学式,

2.给出物质的化学式,要能知道化学式所表示的意义,

3.能根据物质的化学式,寻找物质间的内在规律,

4.通常考查根据指定要求,用化学符号表示粒子、粒子的个数,以及化学符号周围数字的意义等。

5.根据给出化学式去求某一种元素的化合价,

6.有关化学式的计算的主要考查。

初三化学第一章教案

篇12:FrontPage教案-图像

FrontPage教案-图像

课  题: 图 像 教学目标: 知识与技能:使学生在网页中插入图片后会根据自己需要对图片进行一定的处理,具有一定的制作能力。 过程与方法:以演练结合为方法,使学生可以突破难点,消化重点。 情感、态度、价值观:使学生具有辩证唯物主义的思想。 教学重点: 在网页中插入图片后会对图片进行一定的处理。 教学难点: 图片的插入后的布局及工具栏的打开 教学手段: 图片的布局图. 教 学 过 程 : 一、复习提问 1、如何建立站点? 2、如何在站点中添加网页及对网页进行保存? 二、前言 在网页中仅仅有一些文字和水平线是不够的,这样的网页我们看起来也会觉得很单调,这节课我们来学习如何在网页中加入一些图片,并在此程序内对图片进行符合我们要求的处理。 三、新课讲解 (一)插入图片: 1、图片来自于剪贴画:插入――图片――剪贴画; 您可能说,我不会画画,插入图片容易,可是编辑图片就不容易了。没关系,FRONTPAGE自己带有许多剪贴画,你可以把它们插入到自己的网页。 选择“插入”菜单的“图片”命令, 选择“剪贴画”。 你看,各种剪贴画都分类放好了。你可以自由地选择。 我们还可以从INTERNET上插入一个图形。 选择“插入”菜单的“图片”命令, 在URL栏内输入图片的地址,单击“确定”按钮。由于是插入网上的图片,因此在插入图形以后,应该保存一下网页,使图形存到站点内。不过,插入后别忘了保存网页,把剪贴画复制到站点目录下。 2、图片来自于文件夹:插入――图片――来自文件――选择图片位置。 如果有一个图形,怎么把它放到网页上呢? 首先要看你的图形是什么格式的,也就是它扩展名是什么只有扩展名为GIF和JPEG的图形文件才能成为我们的页面的一部分。因为这两种图形格式不仅应用广泛,而且有利于节省存贮空间。 如果图形不是这种格式,使用了其它格式的图形文件,在保存网页时FRONTPAGE会提示做格式转换,FRONTPAGE可以自动进行格式转换。 现在可我们看看怎么插入图形 选择“插入”菜单的“图片”命令,单击“来自文件”按钮。 在默认情况下,FRONTPAGE认为你要插入的图片总是放在你建立的站点的目录或它的子目录下的。可以说,站点就是一个目录。我们把编辑的许多网页文件放在同一个目录下,我们称这个目录为站点的主目录。这些网页引用的.图形一般也放在这个目录下。当然,我们也可以在这个目录下建立其他的子目录,再把所有的图形放在子目录里。所以搜索下拉列表只允许在主目录和主目录下的子目录进行选择。 如果要插入的图片不在主目录下, 在“选择文件”对话框中进行选择。 选择好文件以后,单击“确定”按钮,回到“图形”对话框。单击“确定”按钮,图形就插入了。现在单击“常用”工具栏的“保存”按钮 。 在“另存为”对话框中输入新的web页文件的名字,单击“保存”按钮。 出现了一个对话框, 因为我们刚才插入的文件不在站点内,现在FRONTPAGE要把它复制到站点内,可是使用什么名字,放在站点的哪个目录下呢,就要在这设置了,单击“改变文件夹”按钮, 另外这儿还在需要时对图形的格式进行转换。单击“位置”按钮,在默认情况下,图形被保存在站点的主目录下,现在我们选择IMAGE目录,单击“确定”按钮。回到“嵌入式文件”窗口,再单击“确定”。这样,图形就保存在站点内了。 (二)处理图片:查看――工具栏――图片。 1.设置图形透明:(引入艺术字,吸引学生兴趣,使学生能将各部分内容在机的结合起来) 插入图形只是在网页中运用图形的第一步,在FRONTPAGE里,还有许多对图形的设置。 设置了图形的透明,因此就看不见白色的背底了。 它是怎么实现的呢?单击左边的图形,FRONTPAGE窗口下又多了一个工具栏,我们称它为“图形”工具栏。 这一个就是设置透明的按钮 ,单击“透明”按钮,在右面的图形的白色部分单击,透明的设置就结束了 2.剪切图形 下面这两幅图像,小图是大图的一部分。 实际上小图是把大图经过修剪后得到的。这在我们只用一幅图的某一部分时特别有用。 现在我们把大图也修剪了:首先单击大图,现在“绘图”工具栏出现了。我们单击“绘图”工具栏的“剪裁”按钮 。这时图形四周的小点变为了黑色的。下面还出现了一个剪切框。 调整剪切框到合适的大小,再把它移动到合适的位置,单击剪切按钮, 图片就剪切完毕了。  好像剪小了一点。 没有关系, 单击“撤消”按钮 ,上次的操作就被撤消了。再重新剪切一次就可以了。 如果进行了很多次剪切操作,发现把图弄坏了,这时想重新剪切,该怎么办呢?这时我们可以单击“绘图”工具栏上的“还原” 按钮,图片就被重新载入到文档中,你可以对图片重新进行处理。 3.给图形添加文本 我们可以给图形加文字。 选中左边的图形,单击图形工具栏“文本”按钮 ,现在图形中就出现了一个文本框,输入:“别淘气”。再按一下Esc键,取消文字编辑,就选中文字框了,调整文本框到合适的位置,单击页面其他区域,文字就添加成功了。 如果我要修改 单击一下要修改的文字,这时文字作为一个整体被选中了,再点一下文字,这时文本框里有光标闪烁,你可以编辑文本了,重新输入:“你真淘气”,在页面其他区域单击。 文字就修改完成了。 我们还可以撤消这次操作吗? 4.设置特殊效果 我们再来看看“绘图”工具栏的其他按钮有什么用处。 先来看一看翻转按钮组: 这一个是向左翻转按钮,可以使图形逆时针翻转90度。 这一个是向右翻转按钮,可以使图形顺时针翻转90度。 这一个是水平翻转按钮,可以使图形左边变右边,右边变左边。 这一个是垂直翻转按钮,可以使图形上边变下边,下边变上边。 我们试一试: 单击那颗“会动的心”选中它,单击“绘图”工具栏上移一层按钮 使“会动的心”和“猫”不在同一层上。 移动“会动的心”使它“跳”到桌子上,再切换到“预览”视图看一下,还不错吧?不过要注意,那个“会动的心”是一个透明的Gif动画,所以当把“心”移到桌子上时,Gif动画的背景色就透明了。 当然啦,还得要保存一下文件。 单击“绘图”工具栏的“凹凸效果”按钮 ,这时,图案就变成一个按钮了。 还有其他效果,比如:  “对比度”按钮 可以增减图形的对比度,  “亮度”按钮 可以调整图形的亮度,  “冲蚀”按钮 可以使图形半透明。 这些你都可以有空试一试。并在实际使用中灵活运用。 (二)图片属性: 选定图片――格式――图片属性。(重点讲当图片来自文件的情况,注意图片布局之间的影响,单击图片也可出现工具栏) 一般我们插入的图形总是和文本在一起的,所以调整图形和文本的对齐方式很重要。 在默认情况下,图形自动与文本的底部对齐。这一个网页,由于默认的对齐效果,页面出现了大量的空白。 这时就要调整图形的对齐属性。 在图形上单击鼠标右键,选择“图片属性”,选择“外观”选项卡, 我们把对齐方式调整为“左对齐”。 现在好多了吧? 使用图形可以使网页更加丰富多彩,而且我们还可以用图形来建立超链接,使网页相互联系起来呢。这我们会在下一节讲链接的内容中介绍。 四、操作   学生用图片和绘图的方法来对已制作的网页进行补充. 五、小结 1、插入图片 2、处理图片 3、图片属性 教学前分析: 本节课的内容对于学生的学习来讲,是兴奋点之所在,所以不需采用过多的方法去吸引学生的学习兴趣。而且,在以前相关内容学习的基础上,学生对本节的大部分内容可以很轻松的掌握,基础稍差一些的学生也强以通过教师的讲解对所学知识有进一步的理解。本节课的主要的难点在于,学生对于图片布局的理解,对于这一点,我采用的方法是:用一种布局文字做成环绕同一幅图片让学生加深理解,对于这部分内容学生只需要理解即可,因为在以后的实际制作过程中很少用图片布局来进行网在页的组织,对于“如何让图片位于任一位置”可以给学生留作思考题,为下一步的学习打下基础。 教学后反思: 这节课通过学生感兴趣的艺术字的引用,加强了学生对于工具栏上工具的使用兴趣。由此教师想到如果想让学生去学习一部分内容,应首先在讲解运用实例时就触到他们的兴趣神经。并且这部分知识的讲解使学生能够将他们所学习过的内容融会贯通,为他们的今后学习与制作打下良好的基础。

篇13:《高等数学》第一章 课程教案

《高等数学》第一章 课程教案

《高等数学》第一章 课程教案 一. 课程名称:高等数学 \Calculus 二. 学时与学分:72学时4学分 三. 适用专业:教育技术,计算机,人体,康复 四. 课程教材:《高等数学》,第四版. 同济大学数学教研室编,高等教育出版社 五. 上课教师:刘蓉老师 六. 课程的性质、目的和任务:高等数学是工科大学生最重要的基础理论课之一,它作为工程教育中的一个重要内容,目的在于培养工程技术人员必备的基本数学素质。任务:通过本课程的学习,使学生理解微积分中极限、导数、积分等基本概念;掌握基本的运算技巧;使学生能用所学的知识去解决各种领域中的一些实际问题;训练学生数学推理的严密性,使学生具有一定的数学修养和对实际问题具有抽象、归纳、推广的能力,能用数学的语言描述各种概念和现象,能理解其它学科中所用的数学理论和方法;培养学生学习数学的兴趣,帮助学生养成自学数学教材和其它数学知识的能力,为以后学习其它学科打下良好的基础。 七、教学方式(手段):主要采用讲授新课的方式   第一章 函数极限与连续 一、教学目标与基本要求 1、理解函数的概念,会求函数的定义域、表达式及函数值。会求分段函数的定义域、函数值,并会作出简单的分段函数图像,掌握函数的表示方法。 2、了解函数的奇偶性、单调性、周期性和有界性。 3、理解复合函数及分段函数的概念,了解反函数及隐函数的概念。 4、掌握基本初等函数的性质及其图形。 5、会建立简单应用问题中的函数关系式。 6、理解极限的概念,理解函数在极限与右极限的概念,以及极限存在与左、右极限之间的关系。 7、掌握极限的性质及四则运算法则。 8、掌握极限存在的两个准则,并会利用它们求极限,掌握利用两个重要极限求极限的方法。 9、理解无穷小、无穷大的概念,掌握无穷小的比较方法,会用等价无穷小求极限。 10、理解函数连续性的概念(含左连续与右连续),会判别函数间断点的类型。 11、了解连续函数的性质和初等函数的连续性,了解闭区间上连续函数的性质(有界性、最大值、最小值定理和介值定理),并会应用这些性质。 二、教学内容及学时分配: 第一节 映射与函数2课时 第二节 数列的极限2课时 第三节 函数的极限4课时 第四节 无穷小与无穷大 2课时 第五节 极限运算法则 2课时 第六节 极限存在准则两个重要极限2课时 第七节 无穷小的比较 1课时 第七节 函数的连续性与间断点1课时 第八节 连续函数的运算与初等函数的连续性1课时 第九节 闭区间上连续函数的性质 2课时 三、教学内容的重点及难点: 1.数列的极限、函数的极限的概念 2.极限的性质及四则运算法则; 3.极限存在的两个准则,利用两个重要极限求极限; 4.无穷小的比较,用等价无穷小求极限; 5.闭区间上连续函数的性质。 四、教学内容的深化和拓宽: 1.数列极限的的深刻背景,函数极限的几何意义; 2.两个重要极限、等价无穷小的应用; 3.极限与无穷小的关系; 4.连续的`实质,闭区间上连续函数的性质,用介值定理推证一些简单命题。 五、思考题与习题 第一节 P216 (5),(8) ,(10); 8; 10; 11; 15 ;18; 19; 20 第二节 P30 3 (2) , (3) ,4,6 ;P56 4 (1) , (3) 第三节 P371(4) ;2(2) ;5 ;6 ;7 ;9  第四节 P412 (1) , (2);7 第五节 P48 1 (5),(7),(9),(12),(14); 2 (1),(3) 3 (1); 4  第六节 P55  1(4),(5),(6) ; 2 (2),(3),(4) ; 4 (4) , (5) 第七节 P59 3 ;4 (2) , (3) , (4); 5 (3) 第七节 P64 3 ;4 第八节 P683(5) ,(6) ,(7) ; 4 (4) , (5),(6) ; 5 第九节 P73 2 ;3;4 六、教学方式(手段) 本章主要采用讲授新课的方式。 第一节映射与函数 一、内容要点 基本概念 集合, 区间, 邻域, 常量与变量, 绝对值. 函数的概念 函数的特性:有界性,单调性,奇偶性,周期性. 反函数,复合函数,基本初等函数与初等函数 二、教学要求和注意点 本部分属基本概念,对其中的每一个定义都应加以仔细推敲,透彻理解和牢固其精神实质,从而为学习本课程奠定好基础。 从实际问题建立变量之间的关系是数学应用与实际问题的第一步,也是比较困难的一步,要注意这方面的训练,以便逐步培养分析问题解决问题的能力。   第二节数列的极限  一、内容要点 (1)数列,数列极限的定义; (2)收敛的性质:极限的唯一性、收敛数列的有界性、收敛数列的保号性、收敛数列与其子列的关系。 二、教学要求和注意点 数列:研究其变化规律; 数列极限:极限思想、精确定义、几何意义; 收敛数列的性质:有界性、唯一性、子数列的收敛性. 极限理论是高等数学的理论基础。极限概念比较抽象而且严谨,既是学习中的重点也是学习中的难点。因此要逐字逐句地推敲务求领会它的精神实质。   第三节 函数的极限 一、内容要点 1. 函数极限的定义:趋于有限值与无穷、单侧极限; 2. 函数极限的性质:唯一性、局部保号性、函数极限与数列极限的关系; 二、教学要求和注意点 极限概念比较抽象而且严谨,既是学习中的重点也是学习中的难点。因此要逐字逐句地推敲务求领会它的精神实质。同时还要注意与数列极限的定义与性质加以区别。   第四节 无穷小与无穷大 一、内容要点 1.无穷小、无穷小与函数极限的关系 2.无穷大、无穷小与无穷大之间的关系 二、教学要求和注意点 教学要求: 理解无穷小量、无穷大量的概念,掌握无穷小量与无穷大量的关系 教学注意点: 无穷小与无穷大是相对于过程而言的. (1) 无穷小( 大)是变量,不能与很小(大)的数混淆,零是唯一的无穷小的数; (2)无穷多个无穷小的代数和(乘积)未必是无穷小; (3) 无界变量未必是无穷大.   第五节 极限运算法则 一、内容要点 1. 无穷小的运算法则 2. 极限的四则运算法则 3. 复合函数的极限运算法则 二、教学要求和注意点 教学要求: 熟练掌握无穷小的运算法则, 极限的四则运算法则及其推论, 复合函数的极限运算法则,极限求法: a.多项式与分式函数代入法求极限; b.消去零因子法求极限; c.无穷小因子分出法求极限; d.利用无穷小运算性质求极限; e.利用左右极限求分段函数极限. 教学注意点: 要注意定理的条件与结论,要注意定理的条件的充分与必要性等.   第六节 极限存在准则、两个重要极限 一、内容要点 1. 极限存在准则:单调有解原理,夹逼定理 2. 两个重要极限 二、教学要求和注意点 熟练掌握利两个重要极限求极限的方法   第七节无穷小的比较 一、内容要点 1. 无穷小的比 2. 等价无穷小替换 二、教学要求和注意点 无穷小的比较,反映了同一过程中,两无穷小趋于零的速度快慢,但并不是所有的无穷小都可进行比较. 高(低)阶无穷小;等价无穷小;无穷小的阶. 等价无穷小的代换: 求极限的又一种方法,注意适用条件.   第八节 函数的连续与间断 一、内容要点 1. 函数的连续性 2. 函数的间断点 二、教学要求和注意点 1.函数在一点连续必须满足的三个条件; 2.区间上的连续函数; 3.间断点的分类与判别;   第九节 连续函数的运算与初等函数的连续性 一、内容要点 1. 四则运算的连续性 2. 反函数与复合函数的连续性 3. 初等函数的连续性 二、教学要求和注意点 1. 复合函数的连续性的两个意义: (1)极限符号可以与函数符号互换; (2) 课程教案 TITLE=《高等数学》第一章  2. 初等函数仅在其定义区间内连续, 在其定义域内不一定连续;(定义区间与定义域的区别) 3. 初等函数求极限的方法代入法   第十节 闭区间上连续函数的性质   一、内容要点 本节主要讲四个定理: 最大值和最小值定理、有界性定理、介值定理(几何解释)以及零点定理。 二、教学要求和注意点 注意:1.若区间是开区间,定理不一定成立; 2.若区间内有间断点,定理不一定成立  

篇14:其他教案-第一章 信息技术基础

第一章  信息技术基础

教学内容  §4 计算机系统

教学目的  1,知道计算机系统构成,建立软件、硬件的概念

2,掌握计算机硬件构成,了解计算机基本配置

3,理解计算机工作原理

教学重点  计算机硬件构成及相关概念

教学难点   存储器的相关概念

教学方法  注意根据高中学生自身特点,倡导探究自学的学习方法

教学手段  电子板书、多媒体网络

教学过程

[板书] §1.4 计算机系统

1.4.1, 计算机的硬件结构和配置

1.4.2,计算机软件系统

1.4.3,计算机的工作原理

[板书]1.4.1 计算机的硬件结构和配置

计算机系统 由硬件系统和软件系统组成

计算机硬件 中央处理器、存储器、输入设备、输出设备组成

其中:

中央处理器(CPU)  由控制器、运算器组成,是计算机的核心部件

存储器  存放二进制表示的数据和指令,计算机性能与存储容量和读写速度有关

存储容量用存储器包含的字节(byte)数表示,单位为B

1B =8位(bit) 1KB =1024B  1MB =1024 KB  1GB =1024MB

存储器又分为内存储器和外存储器

内存储器

一是随机存储器(RAM),可读可写,断电后信息丢失

一是只读存储器(ROM),只读不写,断电后信息不丢失

外存储器

主要包含盘和盘,其中盘分为  软盘、盘和U盘,相对内存的存储容量要大得多,价格低,速度慢,断电后信息不丢失

常用软盘规格为 3.5英寸,容量为 1.44MB

常用硬盘一般容量为几十GB

常用光盘分为只读光盘CD-ROM和可改写光盘,容量640MB

输入和输出设备

将人们使用的各种信息转换为计算机可识别的二进制代码存入内存

 

 

(一般介绍计算机基本配置,要求学生写出自己计算机的硬件配置)

1.4.2,计算机软件系统

计算机软件系统分为系统软件和应用软件

系统软件——用户能够使用计算机所必须的基本软件,用于计算机的管理,维护,控制,运行及语言翻译处理,是用户与计算机硬件系统之间的接口。包括操作系统(如Win98),语言处理程序,数据库管理系统

应用软件——为解决某一具体问题设计的具有特殊功能的软件,直接面向使用者(如Microsoft office,kv300)的软件。

小结:计算机系统组成图(略)

1.4.3,计算机的工作原理

1,总线(BUS)

提供CPU和其它部件之间的数据、地址和控制信息的传输通道包含数据总线、地址总线和控制总线。地址总线的位数决定内存的寻址范围。

2,数据的存储

美籍科学家冯.诺依曼最早在计算机中采用二进制、提出“存储程序”并使程序能连续自动执行的设计思想。目前使用的计算机仍采用这一原理。

3,指令及其执行

阅读理解p16-17

[完成补充习题] (第二部分)

[重点小结]

[课后复习和预习] 复习§1.4  计算机系统

P28  思考题  5—7

预习§1.5

[作业 ] 继续完成补充习题

[教后记录]

篇15:初三物理第一章教案

一、教学目的:

1、学会正确使用电流表测量串、并联电路电流,归纳总结串、并联电路电流规律

2、通过动手实验,体验科学研究的方法和科学探究的步骤。

3、培养学生实事求是、尊重自然规律的科学态度,体会交流与合作

二、教学重点和难点:

1、归纳总结串、并联电路电流规律

2、正确的使用电流表测量串、并联电路电流

三、教具准备:

每组三节干电池,一只电流表,两个小灯泡,一个开关,导线若干。

四、教学过程:

(一)、引入新课,说明这节课的内容:

(1)练习使用电流表测电路中的电流。

(2)研究串联电路、并联电路中的电流关系。

(二)、进行新课

这节课要通过实验得到的数据,进行分析、归纳得出串联电路、并联电路中的电流关系,在实验中学习正确使用电流表测电流。实验分两部分进行。

(1)串联电路中的电流

先让学生观察课本上的串联电路图,再要求学生在作业本上画出,先后把电流表接在a、b、c三处的三幅电路图,在每幅图上都要标出电流表的“+”、“-”接线柱。

请同学按电路图连接电路,测出a、b、c三处的电流值,并填入课本表2-1中。在学生动手之前,除了要提醒学生先检查实验器材、明确实验步骤和要记录的数据外,还要提醒学生,要按电流表的使用规则正确使用电流表。

实验结束按完成的前后,把前三组的测量数据填入黑板上的表格内。

表2:研究串联电路中的电流关系

测量数据IaIbIc

第一组

第二组

第三组

组织讨论:比较三组数据的共同点,可以得出什么结论?

结论:串联电路中各处的电流都相等。

(2)并联电路中的电流

先让学生观察课本上的并联电路图,再要求学生在作业本上画出,先后把电流表按在干路和两个支路上的三幅电路图,在每幅图上都要标出电流表的“+”、“-”接线柱。

学生进行分组实验,并把实验记录填入实验报告的表格内。鼓励先完成实验的小组把测量数据写到黑板上相应的表格内。

表3:研究并联电路中的电流关系

测量数据干路IA支路IB支路IC

第一组

第二组

第三组

组织讨论:①哪个电流?②IA跟IB+IC进行比较,能得出什么结论?

结论:并联电路中,干路中的电流等于各支路中的电流之和。

练习题:

五、教学后记:

篇16:初三物理第一章教案

一、教学目的:

1.知道电压的作用;知道电源是提供电压的装置。

2.知道电压的单位;会进行电压单位的换算。

3.会正确使用电压表测量电压。

4.训练连接电路和使用电压表的技能。

二、教学重点和难点:

1、电压的作用;电压表的正确使用

2、电压的作用;电压表的读数

三、教具准备:

电源、开关、灯泡、导线、电路板、电压表

四、教学过程:

1.电压使电路中形成了电流。

用水压形成水流来类比电压形成电流。电源的正极聚集有大量的上电荷,负极聚集有大量的负电荷,在电源的正、负极之间就产生了电压。这个电压使电路中电荷发生定向流动,就形成了电流。

2.电源是提供电压的装置。

电路中要有持续电流的条件:电源,电路应是通路。

3.电压(U)的单位。

国际单位:伏特(伏)V

常用单位:千伏(kV),毫伏(mV),微伏(uV)。

4.常见的电压值。

(1)一节干电池:1.5V。(2)一节铅蓄电池:2V。

(3)安全电压:不高于36V。(4)家庭照明电压:220V。(5)工业电压380V

5电源是提供电压的装置。要知道电压的单位,会进行单位变换。此个,还要记住干电池和家庭电路电压值。

1.电压表的结构:

电压表的外形,符号,接线柱,量程:0-3V,0-15V。

2.读数:

(1)认清所接量程。

(2)认清最小电压值。0-3V每小格0.1V,0-15V每小格0.5V。

(3)检查写单位。

3.练习读数。(幻灯显示)

4.电压表的使用:(实物讲解)

(1)电压表要并联在电路中。

(2)“+”“-”接线柱的接法要正确。

(3)被测电压不要超过电压表的量程。

5.学生上讲台演示电压表的正确使用规则。

6.讨论想想议议

7.练习:(1)把一个灯泡接人电源的电路中,用电压表测出小灯炮两端的电压,画出电路图,并标出电压表的“+”、“一”接线柱。

(2)在两个灯泡L、L串联的电路中,用电压表测小灯泡L两端的

电压,画出电路图,并标出电压表的“+”、“一”接线柱。

(3)在图右所示的电路中,电压表测量的是哪个

灯泡两端的电压,并在电压表两端标出它的“+”、

“一”接线柱。

8.小结(学生归纳)。

利用表格的方法对比电压表和电流表的异同。

教学后记:

篇17:初三物理第一章教案

一、教学目的:

1.会按照电压表使用规则正确使用电压表,会选择电压表的量程和试触,会正确读出电压表的示数,会用电压表测量电池的电压。

2.通过实验研究串联电池组和并联电池组的电压跟每节电压的关系。3.通过实验研究串联电路、并联电路中的电压关系。

二、教学重点和难点:

1.会按照电压表使用规则正确使用电压表

2.通过实验研究串联电池组和并联电池组的电压跟每节电压的关系。

3.会用电压表测量电池的电压。

4、通过实验研究串联电路、并联电路中的电压关系。

三、教具准备:

每组三节干电池,电压表,两个阻值不同的小灯泡,开关,导线若干。

进行新课:

研究干电池串联和并联时的电压关系;

串联电路、并联电路中的电压关系。

四、教学过程:

(一)、将两节相同的干电池按图6-8并联组成电池组,用电压表测这个并联电池组的电压,将测量数据填入表2内。分析并联电池组的电压跟每节电池的电压之间的关系,写出结论。

表2:并联电池组的电压

干电池Ⅰ的电压(V)干电池Ⅱ的电压(V)并串联电池组的电压(V)

结论:。

第二部分:研究串联电路和并联电路的电压关系

一、按图6-9将L1、L2组成串联电路,用电压表分别测出:灯泡L1两端的电压U1,灯泡L2两端的电压U2,灯泡L1与L2串联的总电压U。要求:

先画出将电压表接入电路的三幅电路图,并标出电压表的“+”“-”接线柱。学生自己设计记录表格,做好记录后,分析实验结果,写出结论。

(二)、按图6-10,将L1、L2组成并联电路,用电压表分别测出灯泡L1两端的电压U1,灯泡L2两端的电压U2,A、B两点之间的总电压U。要求:

先在作业本上画出将电压表接入电路的三幅电路图,并标出电压表的“+”、“-”接线柱。学生自己设计记录表格;做好记录后,分析实验结果,写出结论。

实验完毕,断开电源,整理仪器,进行讲评。

4.小结:由学生汇报实验数据和所得到的结论。

(1)串联电池组的电压等于各节电池的电压之和。并联电池组的电压等于每节电池的电压。(2)串联电路的总电压等于各部分电路两端电压之和。在并联电路里,各支路两端的电压相等,并且总电压等于各支路两端的电压。

初三物理第一章教案

篇18:生物必修第一章教案

一、教学目标

关于“生命活动离不开细胞”这一观点,是为深入学习细胞的知识作铺垫,属了解水平。教材通过事例从几个方面提供资料让学生进行分析,因此,该内容的教学目标定为“举例说出”。

在构成生命系统的结构层次中,只有种群和群落是学生没有学习过的,这些结构层次都属于基本概念,因此需要理解学习。不仅理解生命系统的这些结构层次的含义,还应理解这些结构层次是层层相依,紧密相联的,同时,还应初步理解生命系统具有复杂性和多样性。因此,教学目标定为“举例说明”。

二、教学设计思路

三、教学过程

1

2

3

四、总结

一、生命活动离不开细胞1.病毒的生命活动

病毒没有细胞结构,只能依赖才能生活。2.单细胞生物的生命活动

(1)单细胞生物的举例:单细胞动物(如:草履虫、变形虫)、单细胞藻类(如:衣藻)、细菌等。

(2)生命活动的完成:依靠单个细胞就能完成各项生命活动(如草履虫依靠单个细胞完成运动、分裂、摄食、生长等生命活动。3.多细胞生物的生命活动

(1)多细胞生物的举例:大多数动物和植物

(2)生命活动的完成:依赖,共同完成一系列复杂的生命活动。

(3)生命活动的基础:①生命活动:生物与环境之间物质和能量的交换基础:细胞代谢②生命活动:生长发育基础:细胞增殖、分化。③生命活动:遗传与变异基础:细胞内基因的传递和变化。

【思考】试问可否直接用富含有机物的普通培养基来培养病毒?试分析原因。【答案】不能。病毒不能单独进行生命活动,必须用活细胞来培养。4.扩展

1.细胞是生物体结构和功能的基本单位。2.病毒:①结构:细胞无细胞结构,主要由蛋白质和核酸(DNA或RNA)组成。②生活方式:只能营寄生活,只有寄生在寄主的活细胞内才具有生命活动。借助细胞的物质和结构进行繁殖,表现出生命特征

二、生命系统的结构层次

1.结构层次:(从小到大)细胞→组织→器官→系统→个体→种群→群落→生态系统→生物圈

(1)细胞是地球上最小、最基本的生态系统。(2)生物圈是地球上最大的生命系统。

2.相互关系:各生命系统层层相依,又各自有特定的组成、结构和功能。

篇19:生物必修第一章教案

必修一分子与细胞

生命系统的层次组成细胞的分子

系统的边界——细胞膜

生命系统的组成和结构系统内的分工合作——细胞器

把细胞作为基系统的控制中心——细胞核物质的输入和输出系统的功能

能量的供应和利用

系统的发展细胞的生长和繁殖

细胞的分化、衰老、凋亡和癌变

第一章走进细胞

从生物圈到细胞

1.生物分为细胞生物和非细胞生物。细胞生物包括单细胞生物和多细胞生物。非细胞生物指的是病毒。病毒没有细胞结构,由蛋白质和核酸组成。但必须依赖(活细胞)才能生存。2.生命活动离不开细胞,细胞是生物体结构和功能的(基本单位)。3生命系统的结构层次:(细胞)、(组织)、(器官)、(系统)、(个体)、(种群)(群落)、(生态系统)、(生物圈)。病毒不在生命系统范畴。

4血液属于(组织)层次,皮肤属于(器官)层次。

5植物没有(系统)层次,单细胞生物既可化做(个体)层次,又可化做(细胞)层次。6地球上最基本的生命系统是(细胞)。

7种群:在一定的区域内同种生物个体的总和。例:一个池塘中所有的鲤鱼。8群落:在一定的.区域内所有生物的总和。例:一个池塘中所有的生物。(不是所有的鱼)9生态系统:生物群落和它生存的无机环境相互作用而形成的统一整体。

细胞的多样性和统一性

1.原核细胞和真核细胞

本质区别是有无核膜包围的成型的细胞核

2.显微镜的使用

(一)取镜和安放

1.打开显微镜箱,一手握镜臂,一手托镜座,将显微镜取出。

2.把显微镜放在实验台的前方稍偏左,便于用左眼观察物像,用右眼看着画图。3.让镜筒向前,镜臂向自己,然后安放好目镜和物镜。(二)对光

1.转动转换器,使低倍镜对准通光孔。

2.转动载物台下的遮光器,选一较大的光圈对准光孔。

3.左眼注视目镜,(右眼也要睁开),转动反光镜,使光线通过通光孔反射到镜筒内,通过目镜,可看到白亮的视野。当光线强时,让平面镜对着光源,光线弱的时候,用凹面镜对着光源。(三)低倍镜观察

1.把所要观察的玻片标本放在载物台上,用压片夹压住,标本要正对通光孔的中心。

2.眼睛从侧边看着物镜头和标本之间,转动粗准焦螺旋,使镜筒缓缓下降,直到物镜接近玻片标本为止。

3.左眼看目镜内,同时反向缓缓转动粗准焦螺旋,使镜筒上升,直到看到物象为止,再稍稍转动细准焦螺旋,使看到的物象更加清晰。4.看不到物像的重复第2、3两个步骤。(四)高倍镜观察

1.移动装片,在低倍镜下使需要放大的部分移动到视野中央。2.转动转换器,移走低倍物镜,换上高倍物镜。3.缓缓调节细准焦螺旋,使物象清晰。4.调节光圈,使视野亮度适宜。

注意:换上高倍物镜后禁止向下转动粗准焦螺旋。

注意物镜目镜和放大倍数。

3.细胞学说

1、细胞是一个有机体,一切动植物都由细胞发育而来,并由细胞和细胞产物构成;

2、细胞是一个相对独立的单位,既有它自己的生命,又对与其他细胞共同组成的整体的生命起作用。

3、新细胞可以从老细胞中产生。

篇20:《制作图像艺术字》教案

教学目标:

1、知识与技能

1.进一步理解图层、滤镜、通道和路径的含义。

2.能够综合应用图像处理知识制作图像艺术字。

2、过程与方法

本节课运用多媒体教学软件,教师通过示范演示,学生实践的形式,通过演示法、任务驱动法完成本节课的教学。

3、情感态度与价值观

1.培养学生的审美意识、学生的动手能力并培养爱国意识。

2. 通过制作图像艺术字,让学生有一定的成就感,增强学生学习信息技术兴趣。

教学重点

进一步理解图层,滤镜,通道和路径的含义。

教学难点

掌握图层、滤镜、通道和路径的综合应用,掌握制作图像艺术字的技巧。

教学课时:1课时(理论+上机)

教学工具:

多媒体教室、凌波多媒体广播教学系统,Photoshop6.0。

教学方法:

讲讲解法、演示法、任务驱动法 练习法。

教学过程:

导入:

通过学习,我们认识了Photoshop中的图层、滤镜、通道和路径等知识,并且了解了这些知识的简单的应用,今天我们将进一步学习图层、滤镜、通道和路径等知识的综合应用。

讲授新课

制作风光背景的艺术字

第1步:新建一幅宽18厘米、高6厘米的空白图像。

第2步:选择工具,在选项栏中选定选项并设定适当的字体,然后在画面中单击,画面变成粉红色并出现插入点时,输入“润物细无声”。

第3步:选定工具箱中的工具,画面背景恢复原来的颜色,输入的文字变成了文字形状的选定区域。

第4步:执行“选择——变换选区”命令,文字选区四周出现带8个操作点的编辑框。拖动操作点,调整文字选区的大小。

第5步:敲一下回车键,编辑框消失,文字选定区域的大小和位置就确定下来了。

第6步:执行“选择——存储选区”命令,把文字选取保存到Alpha1通道。

第7步打开第一幅图像,执行“选择——全选”命令,选定整幅图像,再执行“编辑——拷贝”命令,把图像信息复制到剪贴板中,再关闭该图像文件。

第8步:返回带文字选区的图像窗口后,执行“编辑——粘贴如”命令图像被粘贴到一个新图层上,文字选区被放入一个图层蒙版中。利用工具适当移动贴入的图像位置。

第9步:执行“选择——载入选区”命令,载入Alpha1通道中的选区。敲键或单击工具箱下部的按钮,进入快速蒙版模式。

第10步:选择工具,在选项栏中把渐变方式设为“黑白渐变”,然后执行“选择——载入选区”命令,载入“图层一蒙版”通道中的选区。

第11步:按住键,从文字选区的中间偏上位置向中间偏下位置拖动鼠标指针,选定一个分级选区。敲键或单击工具箱下部的按钮,推出快速蒙版模式,关闭快速蒙版。这时可以看到,画面中出现了分级选区,约占文字的一半。

第12步:打开第二幅图像,执行“选择——全选”命令,选定整幅图像,再执行“编辑——拷贝”命令,把图像信息复制到剪贴板中后关闭该图像文件。

第13步:执行“编辑——粘贴入”命令,图像被粘贴到分级选区中利用工具适当移动所贴入图像的位置。

第14步:执行“图层——图层样式——斜面和浮雕”命令,出现“图层样式”对话框时,适当设置其中的参数,然后单击按钮。

第15步:打开“通道”调板,单击“图层2蒙版”通道,然后选择工具在选项栏中把渐变方式设为“黑白渐变”,再从画面的中间向底部拖动鼠标指针。操作后,就可以得到所需的艺术字。

总结提高:

我们来认识可以产生特殊效果的其它工具

1.模糊、锐化和涂抹工具

模糊、锐化和涂抹工具可以用来修饰图像。

顾名思义、模糊工具就是一种可以图像变得模糊的工具,利用这个工具可以降低像素之间的反差。与模糊工具相反,锐化工具是一种图像色彩锐化的工具,可以增加像素之间的反差。选定这两种工具中的一种后,适当设置选项栏中的参数,再在画面上单击或者拖动鼠标指针,就可以产生模糊或锐化效果。

利用涂抹工具,可以产生像用干笔刷在未干的油墨上擦过的效果工具后,适当设置选果,即笔尖周围的像素随笔尖一起移动。选定涂抹效果。

2.加深、减淡和海锦工具

加深、减淡和海锦工具也是修饰图像工具。 减淡工具和加深工具主要用于改变图像的明暗度。选定这两种工具中的一种后,适当设置选项栏中的参数,再在画面上单击或者拖动鼠标指针,就可以减淡或加深图像的明暗度。

海锦工具是一种调整图像色彩饱和度的工具,可以提高或者降低图像色彩的饱和度。

请打开一幅图像,复制一个备份后,使用上述工具练习有关的操作,观察图像出现的效果,进一步体会这些工具的功能与用法并使用这些工具所观察到的图像效果。

小结

第三章《物质的量》教案

数字图像处理实验报告

地理教学研究生论文题目

第三章第八节惯性系和非惯性系 教案

信息科学与技术专业就业前景

计算机应用专业自荐信

光信息科学与技术专业就业前景

光信息科学与技术就业前景

软件工程师求职简历

软件工程师求职简历范文

VC图像编程教案 第一章
《VC图像编程教案 第一章.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【VC图像编程教案 第一章(共20篇)】相关文章:

计算机专业学生自荐信2023-02-02

电子信息工程专业自荐信A2022-04-29

计算机基础教案2023-05-24

DSP与单片机的一种高速通信实现方案2022-05-04

网络专业求职信2023-06-12

卧龙岗大学工程学士的就业方向解析2022-12-17

网络管理专业求职信2022-05-07

计算机二级VB上机考试答题攻略2023-01-29

提高计算机专业C语言教学效果的方法探讨2023-06-01

浅析智能光网络技术及发展2022-08-19

点击下载本文文档