“Neverland”通过精心收集,向本站投稿了13篇VC图像编程教案 第四章,下面是小编整理后的VC图像编程教案 第四章,欢迎大家阅读分享借鉴,希望对大家有所帮助。
- 目录
篇1: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图像编程教案篇2: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重写原图像文件(注意保存)篇3: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分钟。篇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:浅析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个未知数的线形方程组,如果用CC++语言来写程序的话其编程量是很大的,如果在CC++语言中能用MATLAB那么简单的代码来实现该功能就可以大大减少工作量,VC和MATLAB接口就是做这个工作的。MATLAB中提供了大量用CC++重新编写的MATLAB库函数,包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、插
篇7:浅析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安装位置workcomponent。
VC中调用COM组件,步骤如下:
1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。
2、面板上添加一个名为“画图”的button按钮,如图8。
图7 工程界面
3、将component_idl.h 和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。两文件默认目录为
4、将上面两文件加入工程:工程->添加工程->Files,选择刚刚拷到目录下的component_idl.h 和component_idl_i.c文件。
5、将目录
6、为程序添加头文件component_idl.h 、component_idl_i.c和mwcomtypes.h,结果如图9
图9 添加头文件
7、按钮画图函数添加代码:
图10 添加按钮函数代码
函数代码的意义涉及到COM,正在
篇8: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:DLLTestTest.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
篇9: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
篇10:第四章复习教案
第四章复习教案模板
例4.如右图所示,为什么池塘底的石块看起来比实际的浅?若要用竹竿去击中它,应瞄准哪一点?若要用一束光线去击中它,又应瞄准哪一点?
5、眼睛的模型
例1.在图9中,________ 图(选填“甲”或“乙”)表示近视眼成像示意图.矫正近视眼应佩戴眼镜的镜片是_________透镜(选填“凸”或“凹”)
例2.近视眼是青少年常患的一种疾病。近视眼究竟是怎么回事?某校兴趣小组同学进行了以下探究实验。
如图甲所示,近视眼镜放在蜡烛和凸透镜中间,使光屏上映出清晰的像,标出光屏位置,表示近视眼的视网膜位置。拿开眼镜,屏上的像变得模糊。向透镜方向移动光屏,像又变得清晰,再标出光屏位置。观察眼球结构图如图乙并结合以上实验,回答:
(1)你猜想眼球中晶状体相当于实验中的_______________________
(2)近视眼患者不戴眼镜时,看见的物像落在视网膜的_____________(填“前方”或“后方”)。
(3)矫正近视眼应配戴的眼镜是凹透镜,其作用是__________________________________。
例3.图中,给凸透镜“戴”上近视眼镜,此时光屏上能成一清晰的像,若“取下”近视眼镜,为使光屏上的像清晰,在保持烛焰和透镜位置不变的条件一下应将光屏 ( )
A.靠近透镜 B.远离透镜
C.靠近透镜或远离透镜都可以 D.保持在原来位置
例4.报纸上放有小明的近视眼镜、爸爸的老花眼镜、奶奶度数更深的`老花镜及妈妈的平光眼睛,如图所示,则奶奶的眼睛是( )
三、拓展训练
1.把反射面向上的凹面镜放在容器内,在凹镜的焦点F处放一点光源S,然后往容器内注水,使水面处于光源S的凹镜之间,要使光源射到凹镜的光线仍是平行射到空气中,光源S的位置 ( )
A.不变 B.适当提高
C.适当降低 D.若水面高则升高,水面低则降低
2.如图,S点光源,S/为S的像点,MN为透镜主轴,用作图的方法确定透镜的种类、位置和透镜的两个焦点。
3.下列所示的透镜对光线起什么作用。
4.下列关于显微镜和望远镜的说法正确的是 ( )
A.天文望远镜能看见遥远的星体,是因为星体上的光线通过望远镜后所成的像比星体本身大得多
B.显微镜可以将来自物体的光线经过两次放大后成一个倒立、放大的实像
C.望远镜可以用一组凸透镜和凹透镜组合而成
D.显微镜可以用一组凸透镜和一组凹面镜组合而成
篇11: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、图片属性 教学前分析: 本节课的内容对于学生的学习来讲,是兴奋点之所在,所以不需采用过多的方法去吸引学生的学习兴趣。而且,在以前相关内容学习的基础上,学生对本节的大部分内容可以很轻松的掌握,基础稍差一些的学生也强以通过教师的讲解对所学知识有进一步的理解。本节课的主要的难点在于,学生对于图片布局的理解,对于这一点,我采用的方法是:用一种布局文字做成环绕同一幅图片让学生加深理解,对于这部分内容学生只需要理解即可,因为在以后的实际制作过程中很少用图片布局来进行网在页的组织,对于“如何让图片位于任一位置”可以给学生留作思考题,为下一步的学习打下基础。 教学后反思: 这节课通过学生感兴趣的艺术字的引用,加强了学生对于工具栏上工具的使用兴趣。由此教师想到如果想让学生去学习一部分内容,应首先在讲解运用实例时就触到他们的兴趣神经。并且这部分知识的讲解使学生能够将他们所学习过的内容融会贯通,为他们的今后学习与制作打下良好的基础。篇12:第四章 会计凭证的教案
一、教学目标:
1、要求学生掌握会计凭证的概念、种类、原始凭证的填制和审核方法。
2、要求学生掌握记账凭证的填制和审核方法。
3、通过实务练习,熟练掌握并运用各类会计凭证填制的技术方法,从而真正理
解会计分录的编制及作用。
二、教学重点:
1、原始凭证的填制
2、记账凭证的填制
三、教学难点:
1、记账凭证的填制
四、教学方法、
分析、讲授与学生动手实践相结合
五、教学课时:
四课时,理论两课时,实验两课时(总48课时之15---18课时)
第一课时 会计凭证之原始凭证
一、教学目标:
1、要求学生掌握会计凭证的概念、种类、原始凭证的填制和审核方法。
二、教学重、难点:
原始凭证的填制
教学流程:
一、导入新课:
首先拿出准备好的票据给学生介绍,说明票据的具体内容,引导学生理解发票、车票等票据是会计实务中进行会计核算必不可少的原始凭证。
二、教学内容:
1、会计凭证的意义和种类
2、原始凭证的填制和审核
新课讲授:
会计凭证的意义和种类
一、会计凭证的意义
会计凭证是记录经济业务、明确经济责任的书面证明,也是登记账簿的依据。
(一)填制、取得会计凭证,可以及时正确地反映各项经济业务的完成情况
(二)审核会计凭证,可以有效地发挥会计的监督作用,使经济业务合理合法
(三)填制和审核会计凭证,便于分清经济责任,加强经济管理中的责任制。
二、会计凭证的种类
会计凭证是多种多样的,按其填制程序和用途可以分为原始凭证和记账凭证两类。
原始凭证
原始凭证是在经济业务发生时取得或填制的,用以证明经济业务的发生或者完成情况,并作为记账原始依据的会计凭证。
原始凭证按其取得的来源不同,可以分为自制原始凭证和外来原始凭证两类。
(一)自制原始凭证
自制原始凭证,是指由本单位内部经办业务的部门或人员,在完成某项经济业务时自行填制的凭证。
自制原始凭证按其填制手续不同,又可分为一次凭证、累计凭证、汇总原始凭证和记账编制凭证四种。
(1)一次凭证。
一次凭证是指只反映一项经济业务,或者同时反映若干项同类性质的经济业务,其填制手续是一次完成的会计凭证。
如 “收料单”、“领料单”、“报销凭单”等。
(2)累计凭证。
累计凭证是指在一定时期内连续记载若干项同类经济业务的会计凭证。这类凭证的填制手续是随着经济业务发生而分次进行的。
如“限额领料单”。
(3)汇总原始凭证。
汇总原始凭证亦称原始凭证汇总表,是指在会计核算工作中,为简化记账凭证的编制工作,将一定时期内若干份记录同类经济业务的原始凭证汇总编制一张汇总凭证,用以集中反映某项经济业务总括发生情况的会计凭证。
如“发料凭证汇总表”、“收料凭证汇总表”、“现金收入汇总表”等。
汇总原始凭证只能将同类内容的经济业务汇总填列在一张汇总凭证中。在一张汇总凭证中不能将两类或两类以上的经济业务汇总填列。
(4)记账编制凭证。
记账编制凭证是根据账簿记录,把某一项经济业务加以归类、整理而重新编制的一种会计凭证。如 “制造费用分配表”。
(二)外来原始凭证
外来原始凭证,是指在同外单位发生经济往来关系时,从外单位取得的凭证。
外来原始凭证都是一次凭证。如企业购买材料、商品时,从供货单位取得的发货票。
原始凭证的填制和审核
一、原始凭证的内容
1、原始凭证的名称;
2、填制凭证的日期;
3、凭证的编号;
4、填制和接受凭证的单位名称;
5、经济业务的基本内容,其中包括经济业务发生的金额;
6、填制单位及有关人员的签章。
二、原始凭证的填制方法
(一)自制原始凭证的填制方法
1、一次凭证的填制
手续是在经济业务发生或完成时,由经办人填制的,一般只反映一项经济业务,或者同时反映若干项同类性质的经济业务。
2、累计凭证的填制
累计凭证是在一定时期不断重复地反映同类经济业务的完成情况,它是由经办人每次经办业务完成后在其上面重复填制而成的。
3、汇总原始凭证的填制
汇总原始凭证只能将同类内容的经济业务汇总在一起,填列在一张汇总原始凭证上,不能将两类以上的经济业务汇总在一起,填列在一张汇总原始凭证上。
4、记账编制凭证的填制
记账编制凭证,是由会计人员根据一定时期内某一账户的记录结果,对某一特定事项进行归类、整理而编制的,以满足会计核算或经济管理的需要。
(二)外来原始凭证的填制方法
外来原始凭证一般由税务局等部门统一印制,或经税务部门批准由经济单位印制,在填制时加盖出据凭证单位公章方可有效,对于一式多联的原始凭证必须用复写纸套写。
三、填制原始凭证的要求
(一)凭证所反映的经济业务必须合法,必须符合国家有关政策、法令、规章、制度的要求,不符合以上要求的,不得列入原始凭证。
(二)填制在凭证上的内容和数字,必须真实可靠,要符合有关经济业务的实际情况。
(三)各种凭证的内容必须逐项填写齐全,不得遗漏,必须符合手续完备的要求,经办业务的有关部门和人员要认真审查,签名盖章。
(四)各种凭证的书写要用蓝黑墨水,文字简要,字迹清楚,易于辨认。不得使用未经国务院公布的简化字;对阿拉伯数字要逐个写清楚,不得连写;在数字前应填写人民币符号“¥”,属于套写的凭证,一定要透,不要上面清楚,下面模糊。
(五)大小写金额数字要符合规格,正确填写。各种凭证不得随意涂改、括擦、挖补,填写错误需要更正时,应用划线更正法,即将错误的文字和数字,用红色墨水划线注销,再将正确的数字和文字用蓝字写在划线部分的上面,并签字盖章。
(六)各种凭证必须连续编号,以便查考。各种凭证如果已预先印定编号,在写坏作废时,应当加盖“作废”戳记,全部保存,不得撕毁。
(七)各种凭证必须及时填制,一切原始凭证都应按照规定程序,及时送交财会部门,由财会部门加以审核,并据以编制记账凭证。
四、原始凭证的审核
审核原始凭证,主要是审查两方面的内容。
(一)审核原始凭证所记录的经济业务的合法性、真实性
(二)审核原始凭证所记录的经济业务的完整性、准确性
三、板书:
四、作业:练习原始凭证的填制与审核。
五、教学总结:本章又进入一个新的会计核算方法“填制和审核会计凭证”,这个方法操作性强,重点要训练学生填制会计凭证的实际技能,并能理解各种会计凭证的用途。
第二课时 记账凭证的教案
一、教学目标:
1、要求学生掌握记账凭证的填制和审核方法。
2、了解会计凭证的传递与保管。
二、教学难点及重点:
记账凭证的填制与审核。
三、教学流程:
一、导入新课:
首先拿出准备好的票据给学生介绍,说明票据的具体内容,引导学生认识并理解记账凭证是会计实务中进行会计核算必不可少。
二、教学内容:
记账凭证的填制和审核。
新课讲授:记账凭证
记账凭证是会计人员根据审核无误的原始凭证或汇总原始凭证,用来确定经济业务应借、应贷的会计科目和金额而填制的,作为登记账簿直接依据的会计凭证。
在登记账簿之前,应按实际发生经济业务的内容编制会计分录,然后据以登记账簿,在实际工作中,会计分录是通过填制记账凭证来完成的。
记账凭证按其适用的经济业务,分为专用记账凭证和通用记账凭证两类。
记账编制凭证的填制
记账编制凭证,是由会计人员根据一定时期内某一账户的记录结果,对某一特定事项进行归类、整理而编制的,以满足会计核算或经济管理的需要。
专用记账凭证
专用记账凭证,是用来专门记录某一类经济业务的记账凭证。专用凭证按其所记录的经济业务是否与现金和银行存款的收付有无关系,又分为收款凭证、付款凭证和转账凭证三种。
1、收款凭证
收款凭证是用来记录现金和银行存款等货币资金收款业务的凭证,它是根据现金和银行存款收款业务的原始凭证填制的。
2、付款凭证
付款凭证是用来记录现金和银行存款等贷币资金付款业务的凭证,它是根据现金和银行存款付款业务的原始凭证填制的。
3、转账凭证
转账凭证是用来记录与现金、银行存款等货币资金收付款业务无关的转账业务(即在经济业务发生时不需要收付现金和银行存款的各项业务)的凭证,它是根据有关转账业务的原始凭证填制的。
通用记账凭证
通用记账凭证的格式,不再分为收款凭证、付款凭证和转账凭证,而是以一种格式记录全部经济业务。
一、记账凭证的基本内容(重点)
1、记账凭证的名称;
2、记账凭证的编号;
3、填制凭证的日期;
4、经济业务的内容摘要;
5、会计科目(包括一级、二级和明细科目)的名称、记账方向和金额;
6、所附原始凭证的张数;
7、经济业务所涉及的金额。
8、制证、审核、记账、会计主管等人员的签章,收款凭证和付款凭证还应由出纳人员签名或盖 章。
二、记账凭证的编制方法(重点)
(一)专用记账凭证的编制方法
专用记账凭证包括收款凭证、付款凭证和转账凭证,不同的记账方法下其格式不同,现按借贷记账的要求介绍其填制方法。
[第四章 会计凭证的教案]
篇13:《制作图像艺术字》教案
教学目标:
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图像编程教案 第四章(推荐13篇)




