抓屏保存成BMP
getscreendatabmp在易语言里的使用方法
getscreendatabmp在易语言里的使用方法一、易语言简介易语言(EPL,Easy Programming Language)是一款国产的编程语言,其特点是简单易学、易用性强,广泛应用于各种软件开发领域。
易语言提供了一系列图形界面编程的功能,今天我们将介绍其中的一款函数——getscreendatabmp,它在屏幕抓取方面具有很高的实用性。
二、getscreendatabmp函数概述getscreendatabmp函数是易语言提供的一个图像处理函数,用于获取屏幕指定区域的图像数据。
该函数可以用来抓取屏幕上的某一区域,并将抓取到的图像以位图(BMP)格式保存。
函数的原型如下:` procedure getscreendatabmp(screenx, screeny, width, height);`参数说明:- screenx、screeny:屏幕抓取区域的左上角坐标。
- width、height:抓取区域的宽度和高度。
三、使用方法及示例下面我们通过一个简单的示例来介绍如何使用getscreendatabmp函数抓取屏幕区域并保存为BMP文件。
```易语言procedure main();varbmpFile : Text;screenX, screenY, width, height : Integer;imgData : Byte;begin// 设置抓取区域坐标和尺寸screenX := 100;screenY := 100;width := 200;height := 150;// 获取屏幕指定区域的图像数据getscreendatabmp(screenX, screenY, width, height);// 保存图像数据为BMP文件bmpFile := "抓取的屏幕区域.bmp";SaveFile(bmpFile, imgData);MsgBox("抓取成功!", "提示");end;```四、注意事项在使用getscreendatabmp函数时,请注意以下几点:1.确保易语言编译器已正确安装并配置好。
犀牛(Rhino)命令表
rhino3.0命令详解1.点sqq/s11选取所有的点selptqq多点_Points2.线s22选取所有的线selcrvs2q选取所有的短线SelShortCrvs2w选取所有的开放的线SelOpenCrvs2e选取所有的封闭的线SelClosedCrvs2r选取所有的复合线SelPolyline3.圆cdd通过已知直径来画圆_Circle_Diametercd3通过已知三点来画圆_Circle_3Point4.椭圆edd画椭圆,有各种参数可选,_Ellipse5.四方形rec画四方形(长/正方形),有各种参数可选,_Rectangle req画多边形,有各种参数可选,_Polygon6.面s33选取所有的面selsrfs3w选取所有的开放的面SelOpenSrfs3e选取所有的封闭的面SelClosedSrf7.复合面s44选取所有的复合面SelPolySrfs4w选取所有的开放的复合面SelOpenPolySrfs4e选取所有的封闭复合面SelClosedPolySrf8.网格面s55选取所有的网格面SelMeshs5w选取所有的开放的网格面SelOpenMeshs5e选取所有的封闭的网格面SelClosedMesh9.层er打开层面板layeraw打开所的层AllLayersOn10.窗口v3切换到三个视图_3Viewv4切换到四个视图_4ViewvtF1顶视'_SetMaximizedViewportTopvfF2前视'_SetMaximizedViewportFrontvrF3右视'_SetMaximizedViewportRightvqF4三视'_SetMaximizedViewportPerspectiveZ放大'_Zoomze全屏显示,物件放中间'_Zoom_Extentszea'_Zoom_All_Extentszs全屏显示,被选取的物件放中间'_Zoom_Selectedzsa'_Zoom_All_SelectedgdF7打开/关闭网格noecho-_DocumentProperties_Grid_ShowGrid_ShowGridAxes!11.线操作fce两直线倒直角_Chamferfe两直线倒圆角_Filletfa修整曲线使其平滑(流线形化)Fair利用两点修剪曲线SubCrvex拉面,通过一线来拉面ExtrudeCrvff偏移线offsetet延长线extendb连接已经有的两线blendqqq线导圆管_Pipe_Pausec多条复合直线_Polylinec1画控制点在外的曲线_Curvec2画控制点在上的曲线_InterpCrvsec徒手自由绘制曲线Sketchbw使物体弯曲,可以用做微调Bendobjectsra测量线曲的半径_Radiusva当两线之间的距离不大时,可用她来融接两点,使之变得光滑_Matchcv两线取三维空间上的镜像线_Crv2Viewa3通过三点来确定一条弧,先外两点,后中间点_Arc_StartPointre旋转形成面_Revolve先点第一线,后点第二线,右键确定(旋转轴)一线围绕二线旋转12.面操作de在面上取一个边线_DupEdgedb在面上取所有的边线_DupBorderew取面上所有的线_ExtractWireframeec面上取一法线_ExtractIsoCurvese取断面_Sectionbs连接已经有的两面blendsrfsg由二,三或四边形成一面,没有方向_EdgeSrfsn有方向即A.B.C_NetworkSrfqa利用点与曲线生成曲面(还没用过)_Patchsf圆滑一些,一般形成三角形Lofts1一条线通过加一条线的轨迹来扫面,有先后顺序之分_Sweep1s2有三条钱,其中一根通过其它两根来形成曲面_Sweep2fff偏移面_OffsetSrffcs两曲面倒角(直角)ChamferSrffs两曲面倒角FilletSrfvs变化变径融接曲面VRBSrf//vt吻合曲线,使两临的两曲线变得光滑,要点击两面的边线MatchSrfjt融合曲面,使两曲面变成一曲面JoinEdgees延长面_ExtendSrf13.线/面/系统等操作st打断,如果是用线来打断面,则面应该是单面,不能是复合面_Split (可用点打断线,也可用线打断面)t1两面/两线/面与线来取交集_Intersectrb重建,一般是打开属性_Rebuildrt打开总的属性栏_OptionsrqF5属性!_Propertieshd隐藏所选取的hidesh显示所有showsaa反向选取所有_Invertseactrl+a选择所有SelAllhdd反向隐藏所有!_Invert_Hiderr镜像mirrortb打开工具条栏_Toolbarww导入Importt修剪trimcy复制copye炸断_Explodev移动mover2二维旋转_Rotatef3三维旋转_Rotate3Dqe打开编辑点(qedit)_EditPtOnqcF10打开控制点(qcontrol)_PointsOngr群组成一个物件_Groupgrg从群组中分离_ungroupte文字Textsc2_Scalesc3_Scale2Dch改变到某层ChangeLayerss在曲面上画一条曲线InterpCrvOnSrferf选择图层中的物体以关闭该图层OneLayerOffsnr捕捉曲面上最接近的一点OnSrfqar平面绘图模式Planarbn抓屏保存成.bmp文件ScreenCaptureToFilesbd选择有问题的物体SelBadObjectsssq选定某一图层上的所有物体SelLayersvs选择所有Mesh网格物体SelMeshsna通过名字选择物体SelNamesnn为物体命名SetObjectNameswd设定Rhino工作路径SetWorkingDirectoryssd在当前视图窗中shade渲染选择的物体ShadeSelectedsbe突出显出断裂的边ShowBrokenEdgesseg显示曲面及多边形表面物体的边ShowEdgessen显示曲面及多边形表面物体未连接的边线ShowNakedEdgeszt选择放缩视图中心点ZoomTargetzw框选设定视图放缩的大小ZoomWindowsth使之变得光滑Smooth14.投影q1正向投影Projectq2法向投影Pullq3将曲线投影到面上ApplyCrva4ApplyMesh将网格投射到面上zbZebra斑马线测试eaemap环境贴图stssplitsrf把一个面打成若干块tobecontinuedRhino在建nurbs面方面的强大功能,真是无以言表,在全面的600多命令中(所有的操作都可能用命令完成任务且RhinoScript支持多字符定义.Max和Maya不可以) 感谢此软件,能够让我运用自如。
getscreendatabmp在易语言里的使用方法
getscreendatabmp在易语言里的使用方法1.简介在易语言中,`g et sc r ee nd at ab mp`是一个非常有用的函数,它可以用于获取指定区域的屏幕截图,并将其保存为BM P格式的图片。
本文将详细介绍`g et sc re en d at ab mp`函数的使用方法和注意事项。
2.函数原型`g et sc re en da ta bmp`函数的原型如下所示:v o id ge ts cr ee nd ata b mp(v ar_i nf o,var,nL ef t,nT op,n Rig h t,nB o t t om);其中:-`va r_in fo`:保存图像信息的变量-`va r`:保存图像数据的变量-`nL ef t`:截图区域的左上角横坐标-`nT op`:截图区域的左上角纵坐标-`nR ig ht`:截图区域的右下角横坐标-`nB ot to m`:截图区域的右下角纵坐标3.使用方法下面是`ge ts cr ee nd a ta bm p`函数的使用方法示例:v a r_in fo=0;v a r_da ta=0;n L ef t=0;n T op=0;n R ig ht=800;n B ot to m=600;g e ts cr ee nd at ab mp(v ar_i nf o,va r_dat a,n Le ft,n To p,nRi g ht,n B o t to m);4.注意事项在使用`ge ts cr ee nd a ta bm p`函数时,需要注意以下几点:-确保传入的截图区域坐标合法,不要超出屏幕边界。
-图像信息变量`va r_i nf o`的类型为`l on g`,图像数据变量`v ar_d at a`的类型为`pv oi d`。
-为了避免内存泄露,需要在使用完毕后及时释放图像数据变量所占用的内存空间。
5.示例代码下面是一个完整的示例代码,演示了如何使用`g et sc re en dat a bm p`函数截取屏幕的一部分区域并保存为B MP图片:#i nc li b<gr ap h.h>#i nc li b<ea.h>v o id ma in(){v a r_in fo=0;v a r_da ta=0;n L ef t=0;n T op=0;n R ig ht=800;n B ot to m=600;//获取屏幕截图g e ts cr ee nd at ab mp(v ar_i nf o,va r_dat a,n Le ft,n To p,nRi g ht,n B o t to m);//创建BM P文件b m p_cr ea te("sc ree n sh ot.b mp",va r_i n fo,v ar_d at a);//释放内存i f(v ar_d at a!=0)m e m_fr ee(v ar_d ata);//显示截图p u ti ma ge(0,0,"scr e en sh ot.b mp",SRC C OP Y);.d el ay(3000);c l os eg ra ph();e x it(0);}6.总结本文介绍了在易语言中使用`ge ts cr ee nd a ta bm p`函数进行屏幕截图的方法。
画图软件使用技巧
言
前面我们已经学习了使用画图软件绘 图、填色、复制图形、旋转图形等, 其实,利用画图软件还能完成其他的 操作。这节课我们再学习一些画图软 件的使用方法。
画图软件使用技巧
将屏幕复制到画图窗口中
1、抓取屏幕 2、保存抓取到的图”窗口中打开JPG格式的文件 2、文件格式转换
二、 文件格式转换
2、文件格式转换
文件格式的转换就是要把一种格式的文件保存为另一种格 式的文件,它需要“另存为”对话框来完成。打开“另存 为”对话框的菜单操作:“文件”/“另存为”。 如把BMP格式的“红玫瑰”文件转换为JPG格式“红玫瑰” 的文件。方法见下图。
各种图形文件格式类型
知识窗—剪贴板
1、在画图窗口中打开JPG格式的文件
要打开文件,需要告诉计算机文件存放的文件夹、文件的名字、文 件的类型,通过打开对话框里的搜寻框、文件列表框、文件类型框 就可以完成相应的选择。 如要在“画图”窗口中打开“我的文档”中的“玫瑰花”文件,文 件的类型是JPG,应该怎样选择打开文件对话框?
注意:在“打开”对话 框中,一定要把文件类 型选为“所有文件”, 否则,列表框中只能出 现BMP格式的文件。
剪贴板是Windows系统提供给用户的一种工具,剪贴 板上可以存放文字、文件、声音、图形、图象等信息; 把文字、文件、声音、图形、图象等信息放到剪贴板 上的方法:使用“编辑”菜单里的“复制”、“剪切” 等命令,所指定的对象就会被放到剪贴板上。使用 Print Screen键也可以将屏幕信息放到剪贴板上。 剪贴板的信息还可以被传递。如果我们已经进行了抓 屏的操作,在画图窗口中再执行“粘贴”命令,这时 剪贴板上的信息就被放到画图窗口中,也就是说,利 用剪贴板把抓取的屏幕信息传递到了画图窗口中。 因此,我们可以说剪贴板是用于信息传递的一种工具。
犀牛(Rhino)命令表
rhino3.0命令详解1.点sqq/s11选取所有的点selptqq多点_Points2.线s22选取所有的线selcrvs2q选取所有的短线SelShortCrvs2w选取所有的开放的线SelOpenCrvs2e选取所有的封闭的线SelClosedCrvs2r选取所有的复合线SelPolyline3.圆cdd通过已知直径来画圆_Circle_Diametercd3通过已知三点来画圆_Circle_3Point4.椭圆edd画椭圆,有各种参数可选,_Ellipse5.四方形rec画四方形(长/正方形),有各种参数可选,_Rectangle req画多边形,有各种参数可选,_Polygon6.面s33选取所有的面selsrfs3w选取所有的开放的面SelOpenSrfs3e选取所有的封闭的面SelClosedSrf7.复合面s44选取所有的复合面SelPolySrfs4w选取所有的开放的复合面SelOpenPolySrfs4e选取所有的封闭复合面SelClosedPolySrf8.网格面s55选取所有的网格面SelMeshs5w选取所有的开放的网格面SelOpenMeshs5e选取所有的封闭的网格面SelClosedMesh9.层er打开层面板layeraw打开所的层AllLayersOn10.窗口v3切换到三个视图_3Viewv4切换到四个视图_4ViewvtF1顶视'_SetMaximizedViewportTopvfF2前视'_SetMaximizedViewportFrontvrF3右视'_SetMaximizedViewportRightvqF4三视'_SetMaximizedViewportPerspectiveZ放大'_Zoomze全屏显示,物件放中间'_Zoom_Extentszea'_Zoom_All_Extentszs全屏显示,被选取的物件放中间'_Zoom_Selectedzsa'_Zoom_All_SelectedgdF7打开/关闭网格noecho-_DocumentProperties_Grid_ShowGrid_ShowGridAxes!11.线操作fce两直线倒直角_Chamferfe两直线倒圆角_Filletfa修整曲线使其平滑(流线形化)Fair利用两点修剪曲线SubCrvex拉面,通过一线来拉面ExtrudeCrvff偏移线offsetet延长线extendb连接已经有的两线blendqqq线导圆管_Pipe_Pausec多条复合直线_Polylinec1画控制点在外的曲线_Curvec2画控制点在上的曲线_InterpCrvsec徒手自由绘制曲线Sketchbw使物体弯曲,可以用做微调Bendobjectsra测量线曲的半径_Radiusva当两线之间的距离不大时,可用她来融接两点,使之变得光滑_Matchcv两线取三维空间上的镜像线_Crv2Viewa3通过三点来确定一条弧,先外两点,后中间点_Arc_StartPointre旋转形成面_Revolve先点第一线,后点第二线,右键确定(旋转轴)一线围绕二线旋转12.面操作de在面上取一个边线_DupEdgedb在面上取所有的边线_DupBorderew取面上所有的线_ExtractWireframeec面上取一法线_ExtractIsoCurvese取断面_Sectionbs连接已经有的两面blendsrfsg由二,三或四边形成一面,没有方向_EdgeSrfsn有方向即A.B.C_NetworkSrfqa利用点与曲线生成曲面(还没用过)_Patchsf圆滑一些,一般形成三角形Lofts1一条线通过加一条线的轨迹来扫面,有先后顺序之分_Sweep1s2有三条钱,其中一根通过其它两根来形成曲面_Sweep2fff偏移面_OffsetSrffcs两曲面倒角(直角)ChamferSrffs两曲面倒角FilletSrfvs变化变径融接曲面VRBSrf//vt吻合曲线,使两临的两曲线变得光滑,要点击两面的边线MatchSrfjt融合曲面,使两曲面变成一曲面JoinEdgees延长面_ExtendSrf13.线/面/系统等操作st打断,如果是用线来打断面,则面应该是单面,不能是复合面_Split (可用点打断线,也可用线打断面)t1两面/两线/面与线来取交集_Intersectrb重建,一般是打开属性_Rebuildrt打开总的属性栏_OptionsrqF5属性!_Propertieshd隐藏所选取的hidesh显示所有showsaa反向选取所有_Invertseactrl+a选择所有SelAllhdd反向隐藏所有!_Invert_Hiderr镜像mirrortb打开工具条栏_Toolbarww导入Importt修剪trimcy复制copye炸断_Explodev移动mover2二维旋转_Rotatef3三维旋转_Rotate3Dqe打开编辑点(qedit)_EditPtOnqcF10打开控制点(qcontrol)_PointsOngr群组成一个物件_Groupgrg从群组中分离_ungroupte文字Textsc2_Scalesc3_Scale2Dch改变到某层ChangeLayerss在曲面上画一条曲线InterpCrvOnSrferf选择图层中的物体以关闭该图层OneLayerOffsnr捕捉曲面上最接近的一点OnSrfqar平面绘图模式Planarbn抓屏保存成.bmp文件ScreenCaptureToFilesbd选择有问题的物体SelBadObjectsssq选定某一图层上的所有物体SelLayersvs选择所有Mesh网格物体SelMeshsna通过名字选择物体SelNamesnn为物体命名SetObjectNameswd设定Rhino工作路径SetWorkingDirectoryssd在当前视图窗中shade渲染选择的物体ShadeSelectedsbe突出显出断裂的边ShowBrokenEdgesseg显示曲面及多边形表面物体的边ShowEdgessen显示曲面及多边形表面物体未连接的边线ShowNakedEdgeszt选择放缩视图中心点ZoomTargetzw框选设定视图放缩的大小ZoomWindowsth使之变得光滑Smooth14.投影q1正向投影Projectq2法向投影Pullq3将曲线投影到面上ApplyCrva4ApplyMesh将网格投射到面上zbZebra斑马线测试eaemap环境贴图stssplitsrf把一个面打成若干块tobecontinuedRhino在建nurbs面方面的强大功能,真是无以言表,在全面的600多命令中(所有的操作都可能用命令完成任务且RhinoScript支持多字符定义.Max和Maya不可以) 感谢此软件,能够让我运用自如。
directshow中利用samplegrabber捕获摄像头每一帧图像并转为bmp文件
directshow中利用samplegrabber捕获摄像头每一帧图像并转为bmp文件关于怎样枚举设备、建立Filter Graph等问题,我就不多说了,说也说不清楚,因为我也是才接触DirectShow。
网上这类资料还是很多,百度知道的比我多多了。
这里主要介绍一下自己在学习了StillCap例子之后,实现利用SampleGrabber捕获摄像头每一帧图像的过程。
过程中遇到的印象深刻的问题会在下一篇博文中介绍。
废话不说了,开门见山吧。
大致思路与代码如下:1、从ISampleGrabber实例化一个sample grabber,充当一个Transform Filter[cpp] viewplaincopy?CComPtr<ISampleGrabber>m_pSampleGrabber;2、设置相关参数,将Grabber注册并且加入到m_pGB这个Filter Graph中[cpp] viewplaincopy?//////////////////////////////////////////////////////////////////////////Add SampleGrabber // create a sample grabber // hr =m_pSampleGrabber.CoCreateInstance( CLSID_SampleGrabber ); if( !m_pSampleGrabber ) { MessageBox(NULL, L"Could not create SampleGrabber (is qedit.dll registered?)", L"", MB_OK); return hr; } CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pSampleGrabber ); // force it to connect to video, 24 bit // CMediaType VideoType;VideoType.SetType( &MEDIATYPE_Video ); VideoType.SetSubtype( &MEDIASUBTYPE_RGB24 ); VideoType.SetFormatType(&FORMAT_VideoInfo); hr = m_pSampleGrabber->SetMediaType( &VideoType ); // shouldn't fail if (FAILED(hr)) { MessageBox(NULL, L"不能初始化SampleGrabber媒体类型。
picpick使用技巧
picpick使用技巧捕捉屏幕内容全屏截图:按 F1,或使用快捷键 F12+X。
区域截图:按 F2,或使用快捷键 F12+C。
窗口截图:按 F3,或使用快捷键 F12+V。
滚动窗口截图:按 F4,或使用快捷键 F12+S。
自定义区域截图:按 F5,或使用快捷键 F12+D,然后使用鼠标选择要捕捉的区域。
编辑和注释编辑工具:包括裁剪、旋转、调整大小、添加文本、箭头和形状等功能。
注释工具:提供荧光笔、高亮、模糊、箭头、线条和文本注释等选项。
模糊和马赛克:保护敏感信息,如电子邮件地址或信用卡号。
保存和共享保存图像:支持多种格式,包括 PNG、JPG、BMP 和 TIFF。
分享图像:可直接上传到 Imgur 或 Pastebin 等平台,或通过电子邮件发送。
复制到剪贴板:快速将截图复制到其他应用程序中,如图像编辑器或文本编辑器。
屏幕录像录制全屏或区域:按 F6,或使用快捷键 F12+R。
录制网络摄像头:按 F7,或使用快捷键 F12+W。
录制音频:选择音频源(麦克风或系统音频)并调整录制设置。
高级功能OCR(光学字符识别):从截图中提取文本,可编辑和复制。
颜色选择器:获取屏幕上的任何颜色的值,并用十六进制代码或 RGB 值表示。
标尺和指南:用于准确测量和对齐元素。
屏幕取色器:获取屏幕上特定点像素的颜色值。
快捷键F1:全屏截图F2:区域截图F3:窗口截图F4:滚动窗口截图F5:自定义区域截图F6:屏幕录像F7:网络摄像头录制F12+X:全屏截图F12+C:区域截图F12+V:窗口截图F12+S:滚动窗口截图 F12+D:自定义区域截图 F12+R:屏幕录像F12+W:网络摄像头录制提示使用快捷键提高效率。
探索编辑和注释工具,个性化您的截图。
利用高级功能,如 OCR 和屏幕取色器,以更深入地与截图交互。
充分利用屏幕录像功能,为演示或教程创建高质量视频。
PicPick 与其他图像编辑器和其他应用程序无缝集成。
OSTA计算机网络管理员中级操作技能考核试卷正文Z1
考件编号: 注 意 事 项 一、本试卷依据2001年颁布的《计算机网络管理员》国家职业标准命制。
二、请根据试题考核要求,完成考试内容。
三、请服从考评人员指挥,保证考核安全顺利进行。
试题1、配置Windows Server 2003 性能监视器 (1)本题分值:10分。
(2)考核时间:20分钟。
(3)考核形式:实操 (4)具体考核要求:PCI 网卡故障排除 一块PCI 总线的10/100Mb/s 自适应网卡,在Windows 操作系统中工作不正常,主要表现为网络时断时续;查看网卡指示灯,发现时灭时亮,而且交替过程很不均匀。
根据故障现象找出并排除。
1)根据故障现象,找出PCI 网卡故障,将故障原因以文本文档方式保存至C:\考生文件夹中,命名为wkgz.txt. 2)排除PCI 网卡故障,将排除方法以文本文档方式保存至C:\考生文件夹中,命名为pcfa.txt. (5)否定项:若考生出现下列情况之一,则应及时终止考试,考生成绩记为零。
1)未发现故障。
2)未成功解决故障。
试题2、在Windows 2003/XP 上配置网络参数 (1)本题分值:10分。
(2)考核时间:15分钟。
(3)考核形式:实操 (4)具体考核要求: 1)正确安装和配置网卡驱动程序。
2)为网卡配置如下制定参数: 指定网卡物理地址:0090F510379F 指定IP 地址及子网掩码为:210.28.186.33 255.255.255.128 210.28.186.34 255.255.255.128 指定网关地址:210.28.286.1 指定DNS 地址:210.28.189.1 172.18.1.1WINS 服务器地址:172.18.1.1(5)否定项:若考生出现下列情况之一,则应及时终止考试,考生成绩记为零。
1)使用自制驱动光盘或自带设备。
考生答题不准超过此线考件编号:试题3、网络监视器安装并进行监视(1)本题分值:20分。
android上用C语言读取fb0实现截屏,并保存为rgb565的bmp
android上用C语言读取fb0实现截屏,并保存为rgb565的bmp
工程源码:/detail/victoryckl/4074654
android上用C语言读取fb0实现截屏,保存为bmp图片,
支持16位(rgb565)、24位(rbg888)两种格式数据,并在android2.2和4.0模拟器上验证通过。
截屏实现主要有两个方面的工作,读取屏幕数据和生成图片。
1.读取屏幕数据
只读方式打开显存设备 /dev/graphics/fb0,再通过mmap用共享方式(MAP_SHARED)映射到一片内存中,其他地方就可以直接以内存的方式读取屏幕数据了。
要注意的是,fb0的虚拟显示设备尺寸,大于实际屏幕显示设备的尺寸,mmap映射时需将安装虚拟尺寸进行映射,否则,截屏可能失败。
2.生成图片
这里生成的图片是bmp格式的,可以根据设备像素的位数自动生成16位(rgb565)、24位(rbg888)两种图片。
主要工作是要正确填充bmp的文件头信息,24位(rbg888)较简单。
16位(rgb565)复杂一点,biCompression成员的值必须是BI_BITFIELDS,原来调色板的前三个位置被三个DWORD变量占据,称为红、绿、蓝掩码,在565格式下,它们则分别为:0xF800、0x07E0、0x001F。
另外,需要主要的是windows要求文件大小必须是4的倍数,文件大小需要做下面的处理才能正确显
3.运行方式:
cygwin下用ndk编译成可执行文件,再将生成的可执行文件push到模拟器的/data/local路径,。
Dephi实现屏幕录像
Dephi实现屏幕录像delphi利用VFW函数实现录制屏幕的功能:1.通过Timer实现抓屏,将屏幕抓图存为BMP格式。
2.调用AVIFileInit初始化3.调用AVIFileOpen创建视频文件4.调用AVIFileCreateStream创建视频流5.调用AVIMakeCompressedStream压缩视频流6.调用AVIStreamSetFormat设置视频流格式7.调用AVIStreamWrite写入视频8.调用AVIStreamClose关闭视频流指针,AVIFileRelease释放视频文件,AVIFileExit关闭视频文件。
源码:1.抓屏存为BMP//抓屏幕, Flag = SRCCOPY,不抓透明窗口,Flag=SRCCOPY or CAPTUREBLT 抓透明窗口//CAPTUREBLT要自己定义//const//{$ifndef CAPTUREBLT}// CAPTUREBLT = $40000000;//{$endif}varScreenBmp: TBitmap;PicIndex: Integer; //图片序号RecTransFlag: Cardinal; //录制屏幕标志,是否录制透明窗体AppPath:string; //应用程序路径TempPath:string; //临时文件夹路径BmpFileName:string; //BMP文件存储路径procedure TForm1.FormCreate(Sender: TObject);beginPicIndex := 0;BmpFileName := '';ScreenBmp := TBitmap.Create;ScreenBmp.PixelFormat := pf24bit;ScreenBmp.Width := Screen.Width;ScreenBmp.Height := Screen.Height;ScreenBmp.Canvas.Brush.Style := bsClear;RecPause := False;//不录制透明窗体RecTransFlag := SRCCOPY;//录制透明窗体//RecTransFlag := SRCCOPY or CAPTUREBLT;AppPath := ExtractFilePath(Application.ExeName);TempPath := AppPath + 'Temp\';if not DirectoryExists(TempPath) thenCreateDirectory(PAnsiChar(TempPath), nil);end;procedure TForm1.DrawCursorToBmp(var ScrBmp: TBitmap);varhCur : HICON;MousePt: TPoint;beginif not Assigned(ScrBmp) thenExit;hCur := GetCursor();GetCursorPos(MousePt);// 画光标DrawIcon(ScrBmp.canvas.handle, MousePt.x, MousePt.y, hCur); end;procedure TForm1.Timer1Timer(Sender: TObject);vardc: HDC;beginDC := GetDC(0);tryBitBlt(ScreenBmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, dc, 0, 0, Flag);finallyReleaseDC(0, dc);end;//根据标记判断是否画上光标DrawCursorToBmp(ScreenBmp);BmpFileName := TempPath + IntToStr(PicIndex) + '.bmp';ScreenBmp.SaveToFile(BmpFileName );end;tryInc(PicIndex);excepton EIntOverflow doend;procedure TForm1.Button1Click(Sender: TObject);begintimer1.Enabled := True;end;2.取保存的bmp图片生成avi并添加声音.uses VFW;varAviFileName:string; //AVI文件存储路径Tempbmp:TBitmap; //生成AVI前读出的BMPfunction GetBitmapData(bmp: TBitmap): TImageData;beginbmp.PixelFormat := pf24bit;Result.Width := bmp.Width;Result.Height := bmp.Height;Result.Stride := Result.Width shl 2;Result.Scan0 := bmp.ScanLine[Result.Height - 1];Result.PixelFormat := -1; // Windows bitmap format flagResult.Reserved := 0;end;procedure CreateAVI;varhr: Integer;Strhdr: TAVIStreamInfo; //AVI流信息Wavehdr: TWaveFormatEx;Opts: TAVICOMPRESSOPTIONS; //压缩选项POpts: PAVICOMPRESSOPTIONS; //压缩选项指针Bi: BITMAPINFOHEADER; //BMP头信息B: Boolean;P: Pointer;i: Integer;bmpData: TImageData;nRet : Integer;beginif FileExists(AviFileName) thenDeleteFile(AviFileName);AVIFileInit;hr := AVIFileOpen(PFile, PChar(AviFileName), OF_CREATE or OF_WRITE, nil);if (hr <> 0) thenExit;//设置AVI流信息ZeroMemory(@Strhdr, SizeOf(TAVIStreamInfo));strhdr.fccType := streamTypeVIDEO;strhdr.fccHandler := mmioFOURCC('D', 'I', 'V', 'X');strhdr.dwFlags := 0;strhdr.dwCaps := 0;strhdr.wPriority := 0;strhdr.wLanguage := 0;strhdr.dwScale := 1;strhdr.dwRate :=5; //pfsstrhdr.dwStart := 0;strhdr.dwLength := 0;strhdr.dwInitialFrames := 0;strhdr.dwSuggestedBufferSize := ((Screen.Width * 3 + 3) and $FFFC) * screen.Height; //Screen.Height * screen.Width * 3;strhdr.dwQuality := 0;strhdr.dwSampleSize := 1;strhdr.rcFrame := Rect(0, 0, Screen.Width, Screen.Height);strhdr.dwEditCount := 0;strhdr.dwFormatChangeCount := 0;strhdr.szName[0] := #0;strhdr.szName[1] := #0;//设置WAV流信息ZeroMemory(@Wavehdr, SizeOf(TWaveFormatEx));Wavehdr.cbSize := 0;Wavehdr.nChannels := 1;Wavehdr.wFormatTag:= 1;Wavehdr.wBitsPerSample := 16;Wavehdr.nSamplesPerSec := 8000;Wavehdr.nBlockAlign := Wavehdr.wBitsPerSample *Wavehdr.nChannels div 8;Wavehdr.nAvgBytesPerSec := Wavehdr.nBlockAlign *Wavehdr.nSamplesPerSec;ZeroMemory(@opts, SizeOf(TAVICOMPRESSOPTIONS));//设置压缩信息//Indeo? Video 5.10opts.fccType := streamTypeVIDEO; // vidsopts.fccHandler := 808810089;opts.dwKeyFrameEvery := 0;opts.dwQuality := 8500;opts.dwBytesPerSecond := 0;opts.dwFlags := 8;opts.lpFormat := nil;opts.cbFormat := 0;opts.cbParms := 48;opts.dwInterleaveEvery := 0;//设置BMP头信息ZeroMemory(@bi, SizeOf(BITMAPINFOHEADER));bi.biSize := SizeOf(bi);bi.biWidth := Screen.Width;bi.biHeight := Screen.Height;bi.biPlanes := 1;bi.biBitCount := 24;bi.biCompression := 0;bi.biSizeImage := ((Screen.Width * 3 + 3) and $FFFC) * screen.Height; //(((bih.biWidth * 3) + 3) & 0xFFFC) * bih.biHeight//Screen.Height * screen.Width * 3; //_stride * _height;bi.biXPelsPerMeter := 0;bi.biYPelsPerMeter := 0;bi.biClrUsed := 0;bi.biClrImportant := 0;hr := AVIFileCreateStream(PFile, PSrcStream, @strhdr);if (hr <> 0) thenExit;hr := AVIMakeCompressedStream(PCompStream, PSrcStream, @opts, nil);if (hr <> 0) thenAbort;hr := AVIStreamSetFormat(PCompStream, 20, @bi, 40);if (hr <> 0) thenAbort;Tempbmp := TBitmap.Create;Tempbmp.LoadFromFile(bmpFile);bmpData := GetBitmapData(Tempbmp);hr := AVIStreamWrite(PCompStream,FrameCount, //存在第几帧1,bmpData.Scan0,((Screen.Width *3 + 3) and $FFFC) * screen.Height,0,nil,nil);if (hr <> 0) thenAbort;//添加声音AddAVISound;end;end;procedure AddAVISound;varwfx: TWAVEFORMATEX;buf: array of char;wav: PWavChunk;hf: HWND;size: DWORD;Strhdr: TAVIStreamInfo;hr: Cardinal;numbytes, numsamps: DWORD;beginZeroMemory(@wfx, sizeof(TWAVEFORMATEX));hf := CreateFile(PChar(WavFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);if (hf = 0) thenExit;trysize := GetFileSize(hf, nil);SetLength(buf, size);ReadFile(hf, buf[0], size, size, nil);finallyCloseHandle(hf);end;wav := PWavChunk(buf);wfx.wFormatTag := wav.fmt.wFormatTag;wfx.cbSize := 0;wfx.nAvgBytesPerSec := wav.fmt.dwAvgBytesPerSec;wfx.nBlockAlign := wav.fmt.wBlockAlign;wfx.nChannels := wav.fmt.wChannels;wfx.nSamplesPerSec := wav.fmt.dwSamplesPerSec;wfx.wBitsPerSample := wav.fmt.wBitsPerSample;ZeroMemory(@Strhdr, SizeOf(TAVIStreamInfo));Strhdr.fccType := streamtypeAUDIO;Strhdr.dwScale := wfx.nBlockAlign;Strhdr.dwRate := wfx.nSamplesPerSec * wfx.nBlockAlign;Strhdr.dwSampleSize := wfx.nBlockAlign;Strhdr.dwQuality := DWORD(-1);hr := AVIFileCreateStream(PFile, PWavStream, @Strhdr);if (hr <> 0) thenbeginif (buf <> nil) thenbuf := nil;Exit;end;hr := AVIStreamSetFormat(PWavStream, 0, @wfx, SizeOf(TWAVEFORMATEX)); if (hr <> 0) thenbeginif (buf <> nil) thenbuf := nil;Exit;end;// now we can write the datanumbytes := wav.dat.size;if wfx.wBitsPerSample <> 0 thennumsamps := numbytes * 8 div wfx.wBitsPerSampleelsenumsamps := 0;hr := AVIStreamWrite(PWavStream, 0, numsamps, wav, numbytes, 0, nil, nil);if (buf <> nil) thenbuf := nil;if (hr <> 0) thenExit;。
用Visual C++设计屏幕抓图程序
用Visual C++设计屏幕抓图程序在Windows操作系统中,当用户按下"PrintScreen"按钮后,Windows 自动将当前屏幕的图像拷贝到系统剪贴板中,这时可以通过"画笔"这个小程序将剪贴板中的内容保存成图像文件,可以看出,如果需要将当前屏幕保存下来还是比较麻烦的,能否可以自己编写一个应用程序,自动将当前屏幕的内容保存到一个图像文件中去呢?这个答案是肯定的,本实例应用程序就是利用通用的热键管理DLL库实现的热键功能,在收到热键通知后截取屏幕的内容并保存到bmp文件中。
例如我们设置图片保存路径为c:\,热键为F9 + Control,然后按Change 按钮设置好热键,那么当我们按下CTRL+F9后,当前界面将以BMP图像文件的格式被保存在C:\目录下。
一、实现方法热键管理DLL实际上是一个键盘钩子,由它来监视系统的键盘事件。
如果有和程序登记符合的按键组合就通知该程序的窗口。
为了应用方便,本实例把它做成了一个标准的管理库来为其它的程序通过热键服务,它有两个输出函数:AddHotkey()和DeleteHotkey(),程序只需要调用这两个函数就可以了,如果编译之后不用改变热键,则只需要AddHotkey就可以了。
DLL中的所有的全局变量都放在一个共享段中,定义如下:#pragma data_seg("shareddata")HHOOK hHook =NULL; //钩子句柄UINT nHookCount =0; //挂接的程序数目static UCHAR HotKey[MAX_KEY] = {0}; //热键虚拟键码static UCHAR HotKeyMask[MAX_KEY] = {0}; //组合掩码,control=4,alt=2,shift=1static HWND hCallWnd[MAX_KEY] = {0}; //window handle associated with hotkeystatic int KeyCount =0;static UCHAR MaskBits =0; //00000 Ctrl=4 & Alt=2 & Shift=1#pragma data_seg()关于共享段,有几点重要的说明:一是必须在链接选项里指定该段为共享:一种方法是在project->settings->link->object/library中加上/section:shareddata,rws;第二种方法是在def文件的sections里加上一句shareddata read write shared;第三种指定共享段的方法在程序里加上一句#pragma comment(linker,"section:shareddata,rws")。
MFC中如何在Windows下截屏并保存到内存和BMP文件
41. if (iBits <= 1)42. wBitCount = 1;43. elseif (iBits <= 4)44. wBitCount = 4;45. elseif (iBits <= 8)46. wBitCount = 8;47. elseif (iBits <= 24)48. wBitCount = 24;49. else50. wBitCount = iBits;51.52. DWORD dwPaletteSize=0; //调色板大小,位图中像素字节大小53. if (wBitCount <= 8)54. dwPaletteSize = (1 << wBitCount) *sizeof(RGBQUAD);55.56.57. BITMAP bm; //位图属性结构58. ::GetObject(hBitmap, sizeof(bm), (LPSTR)&bm);59.60.61. BITMAPINFOHEADER bi,bi1; //位图信息头结构62. bi.biSize = sizeof(BITMAPINFOHEADER);63. bi.biWidth = bm.bmWidth;64. bi.biHeight = bm.bmHeight;65. bi.biPlanes = 1;66. bi.biBitCount = wBitCount;67. bi.biCompression = BI_RGB; //BI_RGB表示位图没有压缩68. bi.biSizeImage = 0;69. bi.biXPelsPerMeter = 0;70. bi.biYPelsPerMeter = 0;71. bi.biClrUsed = 0;72. bi.biClrImportant = 0;73. bi1=bi;74. bi1.biBitCount=24;75.76. DWORD dwBmBitsSize = ((bm.bmWidth * wBitCount+31)/32) * 4 * bm.bmHeight;77. HANDLE hDib = ::GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER)); //为位图内容分配内存78. LPBITMAPINFOHEADER lpbi =(LPBITMAPINFOHEADER)GlobalLock(hDib);79. *lpbi = bi;80.81. HANDLE hPal = ::GetStockObject(DEFAULT_PALETTE); // 处理调色板82. HANDLE hOldPal=NULL;83. if (hPal)84. {85. hDC = ::GetDC(NULL);86. hOldPal = SelectPalette(hDC,(HPALETTE)hPal, FALSE);87. RealizePalette(hDC);88. }89. int nOutputBytes = 0;90. unsigned char *pJpp,*m_pDibBits;91. pJpp = new unsigned char [dwBmBitsSize];92. m_pDibBits = new unsigned char [dwBmBitsSize];93. //::GetDIBits(hDC, hBitmap, 0, (UINT)bm.bmHeight,m_pDibBits,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);94. ::GetDIBits(hDC, hBitmap, 0, (UINT) bm.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO*)lpbi,DIB_RGB_COLORS);// 获取该调色板下新的像素值95. if (hOldPal)//恢复调色板96. {97. SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);98. RealizePalette(hDC);99. ::ReleaseDC(NULL, hDC);100. }101. memcpy(m_pDibBits,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,dwBmBitsSize); // by tang wei m_pDibBits指向BMP的出去三个头部分后的实际数据102. /* int i=0,j=0;103.104. for(j=0;j105. {106. if(j%4==3)107. j++;108. m_pDibBits[i]=m_pDibBits[j];109. i++;110. }*/111.112.113. BITMAPFILEHEADER bmfHdr; //位图文件头结构114. bmfHdr.bfType = 0x4D42; // "BM" // 设置位图文件头115. DWORD dwDIBSize = sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;116. bmfHdr.bfSize = dwDIBSize;117. bmfHdr.bfReserved1 = 0;118. bmfHdr.bfReserved2 = 0;119. bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;120.121. HANDLE hFile = CreateFile(strFileName1, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL |FILE_FLAG_SEQUENTIAL_SCAN, NULL);//创建位图文件122. DWORD dwWritten;123. WriteFile(hFile, (LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER), &dwWritten, NULL); // 写入位图文件头124. WriteFile(hFile, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);// 写入位图文件其余内容125.126. //By Tang Wei 同时把位图文件部分写到txt里面。
屏幕截图快速保存方法
屏幕截图快速保存方法屏幕截图是我们在使用计算机时不可或缺的功能之一,它可以帮助我们轻松捕捉到屏幕上的内容,并保存为图片文件。
无论是在工作中还是在日常生活中,都可以用到屏幕截图。
在本文中,我将向您介绍一些快速保存屏幕截图的方法。
1. Windows系统1.1 使用快捷键保存截图在Windows系统中,使用快捷键是最方便的屏幕截图方法之一。
以下是几个常用的快捷键:- Print Screen键:按下该键会将整个屏幕截图保存到剪贴板。
您可以将其粘贴到任何图片编辑软件中,并保存为图片文件。
- Alt + Print Screen键:按下这两个键会将当前活动窗口的截图保存到剪贴板。
同样,您可以将其粘贴到图片编辑软件中并保存。
- Windows键+ Shift + S键:按下这三个键后屏幕会变暗,鼠标变成一个加号形状。
您可以用鼠标选择需要截图的区域,截图将保存到剪贴板中。
1.2 使用Windows自带的截图工具Windows系统还自带了一个截图工具,名为“截图工具”。
使用它可以更灵活地进行截图。
以下是如何使用它的步骤:- 打开“截图工具”应用程序,可以通过Windows搜索栏找到它。
- 在“截图工具”中,您可以选择四种不同的截图模式:矩形截图、自由截图、窗口截图和全屏截图。
根据您的需求选择其中一种模式。
- 完成截图后,您可以在工具中进行一些编辑操作,例如在截图上添加文字、画笔标记等。
- 最后,点击“文件”菜单,选择“保存”来保存截图。
2. Mac系统2.1 使用快捷键保存截图和Windows系统类似,在Mac系统中,使用快捷键也是非常便捷的屏幕截图方法之一。
以下是几个常用的快捷键:- Command + Shift + 3键:按下这三个键后,整个屏幕截图将会自动保存到桌面上。
- Command + Shift + 4键:按下这三个键后,鼠标会变成一个十字形状,您可以用鼠标选择需要截图的区域,截图将会自动保存到桌面上。
优化大师使用说明
使用指南系统信息检测系统信息检测的主要功能为:向使用者提供系统的硬件、软件情况报告,同时提供的系统性能测试帮助使用者了解系统的CPU/内存速度、显示卡速度等。
检测结果用户可以保存为文件以便今后对比和参考。
检测过程中,Windows优化大师会对部分关键指标提出性能提升建议。
系统检测模块按照系统信息总揽、处理器和BIOS、视频系统信息、音频系统信息、存储系统信息、网络系统信息、其它外部设备、软件信息检测、系统性能测试等分为九个大类:(1)、系统信息总览:检测Windows操作系统的一些情况,同时对系统的主要硬件设备列表显示。
(2)、处理器和BIOS:检测电脑的CPU、BIOS、主板(包括芯片组、主板插槽、接口等)、系统制造商、总线设备等。
Windows优化大师可以检测的CPU类型如下:Intel系列:Core系列、Pentium Extreme Edition、Pentium 4 Cedar Mill、Celeron D、Pentium M Yonah、Pentium D SmithField、Pentium 4 Prescott2M、Pentium M Dothan、Pentium M Banias、Celeron M、Xeon MP、Xeon、Pentium 4 Gallatin、Pentium 4 Prescott、Pentium 4 Northwood、Celeron Northwood、Pentium 4 Willamette、Celeron Willamette、Pentium 3 Tualatin、Celeron Tualatin、Pentium 3 Xeon、Pentium 3 Coppermine、Pentium 3 Katmai、Celeron II、Pentium II(0.25/0.35微米)、Pentium II(移动处理器)、Celeron A、Celeron、Pentium MMX P55C(0.25/0.28微米)、Pentium MMX Mobile、Pentium等CPU。
getscreendatabmp在易语言里的使用方法 -回复
getscreendatabmp在易语言里的使用方法-回复易语言是一种简单易学的编程语言,广泛应用于Windows平台的软件开发。
在易语言中,我们可以使用各种函数和命令来实现各种功能。
其中一个比较常用的函数是"getscreendatabmp",它用于获取屏幕上指定区域的图像数据,并保存为BMP图片格式。
本文将详细介绍"getscreendatabmp"函数的使用方法,以帮助读者更好地理解和运用这个功能。
1. 函数介绍"getscreendatabmp"函数是易语言提供的用于截取屏幕图片的函数。
它的完整函数原型如下:"GetScreenDataBmp (int HWnd, LPSTR szFile, int x, int y, int width, int height, int flag);"这个函数有七个参数,分别是:- HWnd:要截取区域所在窗口的句柄,可以使用"窗口句柄"相关函数来获取。
- szFile:保存图片的文件路径,使用字符串类型。
- x:截取区域的起始横坐标。
- y:截取区域的起始纵坐标。
- width:截取区域的宽度。
- height:截取区域的高度。
- flag:控制截图操作的标志位,可以设置为0,默认值即可。
2. 函数使用步骤在使用"getscreendatabmp"函数进行屏幕截图时,需要以下几个步骤:步骤1:导入函数库打开易语言开发环境,在工程文件中选择"函数库管理器",然后点击"工程函数库"菜单,找到"ScreenData.dll"函数库并勾选。
这个函数库是易语言提供的用于屏幕截图的函数库,需要勾选后才能使用其中的函数。
步骤2:获取要截取区域的窗口句柄使用相关函数获取要截取区域所在窗口的句柄。
BMP图像格式详解及VB函数截图保存
BMP图像格式详解及VB截图保存方法2012-03-06 13:14BMP是一种与硬件设备无关的图像文件格式,使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。
BMP文件的图像深度可选lbit、4bit、8bit及24bit。
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
文件结构:典型的BMP图像文件由四部分组成:1:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
位图的类型:位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。
DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。
然而,随着显示器制造技术的进步,以及显示设备的多样化,DDB位图的一些固有的问题开始浮现出来了。
比如,它不能够存储(或者说获取)创建这张图片的原始设备的分辨率,这样,应用程序就不能快速的判断客户机的显示设备是否适合显示这张图片。
为了解决这一难题,微软创建了DIB位图格式。
设备无关位图 (Device-Independent Bitmap)DIB位图包含下列的颜色和尺寸信息:*原始设备(即创建图片的设备)的颜色格式。
*原始设备的分辨率。
*原始设备的调色板*一个位数组,由红、绿、蓝(RGB)三个值代表一个像素。
*一个数组压缩标志,用于表明数据的压缩方案(如果需要的话)。
实验报告范例—多媒体课程
内容与作业题目一致
三、实验记录 P8 第 1 题 实验记录:
该部分和“实验内容”部分相对应, 记录完成每道题的步骤, 是报告中最 重要的部分 步骤需要标号,如(1) (2)……标 注清晰即可
(1)按键盘上“PrintScreen”键,抓取整个桌面图片; (2)打开“开始→程序→附件→画图” ,打开画图工具,按住键盘上“Ctrl”+ “V”将抓取的桌面图片粘贴在画图窗口中; (3)双击“计算机” ,打开我的电脑,双击 D 盘,打开 D 盘,右键单击“新建” , 新建一个文件夹,重命名为“ks01” ; (4)单击“文件→保存”将文件保存在 D:\ks01 文件夹下,文件名输入“zm” , 保存类型为“*.bmp; *.dib” ,以上是抓取整个桌面的步骤。 (5)同时按键盘上“Alt”+“PrintScreen”键,抓取当前一属性对话框图片; (6)……; …… (7)……以上是抓取桌面一属性对话框的步骤。
此部分在实验指导书上 有,视情况写 4 条左右 一、实验目的 1. 掌握 Windows XP 中图像捕捉方法 2. 了解 Authorware7.0 的功能和特点 3. 熟悉 Authorware7.0 的运行环境和工作界面及简单应用 抄写作业题目,写清页码、题号, 二、实验内容
P8 第 1 题 (1) 利用键盘上的抓屏键分别抓取整个桌面,及桌面一属性对话框,并保存为 为图图片文件,保存在 D:\ks01 文件夹下,文件名分别为 zm.bmp 和 dhk.bmp。 P8 第 2 题 利用抓屏软件 HyperSnap—DX 分别抓取整个桌面…… P8 第 3 题 使用 authorware 制作一个动态演示“桌面上的小球” (1)背景为…… (2) …… (3) ……
P8 第 2 题 实验记录:
按键精灵 常用语法及使用方法
按键精灵常用语法及使用方法抓点、抓色的使用步骤第一步、抓屏打开你需要抓点的软件界面,按下键盘上的“PRINTSCREEN”键。
然后进入按键的“抓点”的界面,这时候你刚才的抓图就会显示在抓图界面中;第二步:抓点抓色在抓屏的界面上按下鼠标左键,即可成功抓点抓色;抓区域坐标的功能在“抓图”当中近邻鼠标左键并拉动,即可获得拉动的区域坐标;这对于使用“区域找色”这个功能来说非常有帮助,因为获得的区域坐标,就是函数中需要输入的参数;偏移抓点在一些游戏里,鼠标的形状会“挡住”真正你想要抓的点的颜,所以按下热键之后,一般来说把偏移量设置为了-1、-2、-3就可以的避开鼠标颜色的妨碍,抓到真正的屏幕颜色;载入位图有些游戏无法使用抓屏热键,这时可以使用自带的抓图功能将图片保存为BMP格式的然后载入位图进行抓点;鼠标动作:左键单击:就是我们常说的用鼠标点一下;右键单击:用鼠标点一下,比如我们要复制或粘贴文字,可以先定后点一下鼠标右键;中键单击:如果你的鼠标没有中间的那个键,也可以使用这个设置;左键双击:打开某个程序的时候我们一般都这样打开;左键按下:在屏幕上拖动什么东西的时候就这样干;左键弹起:按下了总要弹起吧,否则电脑会以为你一直按着先前按下的鼠标;右键按下:同上;右键弹起:同上;执行次数:就是鼠标操作多少次;工作方式:特殊需求的用户可选择此项,保持默认直(同理于键盘操作的相同选项);普通工作方式:通过软件模拟按键;硬件模拟:通过硬件模拟按键。
注意:不支持USB设备;鼠标移到:坐标,就是鼠标的位置(通过抓点获得坐标,点击查看抓点帮助);鼠标相对移动:是让鼠标以它当前的位置开始移动;鼠标滚轮:模拟滚轮的滚动动作,可设定滚动的齿格数。
滚动1格对应可在系统里设置,具体方法是在“控制面板→硬件→鼠标→轮”里设定,默认齿格对应3行;鼠标位置操作:当前鼠标所在的位置:让按键精灵雇当前鼠标所在的位置;恢复上次的鼠标位置:见上一条;检测鼠标操作功能:脚本暂停,按任意键继续:脚本在插入暂停,直到脚本使用者按下鼠标任意一个按键;把按键码存入变量:将检测出的按键的编号保存至一个变量;颜色判断:如果坐标:这里的X和Y代表横坐标和纵坐标;颜色匹配:等于:和右边的颜色相同;不等于:和的颜色不同;约等于:和右边的颜色差不多;颜色:每一个颜色在这里都有一个代号;;如果你通过抓点对话框找到颜色的话就不用关心代号到底是什么意思抓点坐标/颜色:点击查看详细介绍准备循环执行:插入后,右边普通文本框将显示(假设你要求循环3遍)循环结束的字样,这时你可以在这两句话中插入你想循环执行的语句就行了;这是缩短脚本篇幅、使于脚本修改的好办法;如果表达式取值为真:这里的空格里要填一个表达式(点击查看什么是表达式);如果当这个表达式算出来的大于0的数字或它的逻辑为真,就执行后面的操作;表达式判断后的操作语句:执行后面的语句:文本框中显示(假设你的表达式为了1+1=3);如果表达式(1+1=3)为真,则条件结束如果1+1=3成立(为真),那么就执行条件结束前的语句;在这个例子中,1+1永远等于2的所以脚本将老是在循环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
INT nBitsPixel = pDC->GetDeviceCaps(BITSPIXEL);
CRect rcWndRect;
GetClientRect(&rcWndRect);
INT nWidth = rcWndRect.right;
DeleteDC(hMemDC);
DeleteObject(hNewBit);
if (pPicData)
{
DWORD nLineLen = (nWidth * nBitsPixel + 31) / 32 * 4;
DWORD nColSize = sizeof(RGBQUAD)*((nBitsPixel <= 8) ? 1<<nBitsPixel : 0);
memset(&BmpInfoHead,0,sizeof(BmpInfoHead));
BmpInfoHead.biSize = sizeof(BmpInfoHead);
BmpInfoHead.biWidth = nWidth;
BmpInfoHead.biHeight = nHeight;
HBITMAP hNewBit = CreateCompatibleBitmap( hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
HBITMAP hOldBitmap = (HBITMAP)SelectObject( hMemDC, hNewBit );
选修内容3:抓屏并保存,另:阅读DIB.cpp和DIB.h文件
void CbjlDlg::SavePicture()
{
BeginWaitCursor();
BYTE *pPicData = NULL;
CDC *pDC = GetDC();
HDC hScrDC = pDC->GetSafeHdc();
0, nHeight,
pPicData, (LPBITMAPINFO)&BmpInfoHead,
DIB_RGB_COLORS);
//得到屏幕位图的句柄
SelectObject(hMemDC, hOldBitmap);
//释放
ReleaseDC(pDC);
// 把屏幕设备描述表拷贝到内存设备描述表中
StretchBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, 0, 0, nWidth, nHeight, SRCCOPY);
//取得位图数据
GetDIBits( hMemDC, hNewBit,
BmpInfoHead.biXPelsPerMeter = 0 ;
BmpInfoHead.biYPelsPerMeter = 0 ;
BmpInfoHead.biClrUsed = (nBitsPixel <= 8) ? 1<<nBitsPixel : 0;
BmpInfoHead.biClrImportant = 0 ;
//pDC->Rectangle(90, 90, 200, 200);
pDC->BeginPath();
pDC->Rectangle(50, 50, 150, 150);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
pDC->Rectangle(90, 90, 200, 200);
BmpFileHead.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nImageSize;
BmpFileHead.bfReserved1 = BmpFileHead.bfReserved2 = 0;
BmpFileHead.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
CFile file;
if (file.Open(m_sSaveFileName, CFile::modeCreate | CFile::modeWrite))
{
file.Write(&BmpFileHead,sizeof(BmpFileHead));
file.Write(&BmpInfoHead,sizeof(BmpInfoHead));
BmpInfoHead.biBitCount = nBitsPixel;
BmpInfoHead.biCompression = BI_RGB;
BmpInfoHead.biPlanes = 1;
BmpInfoHead.biSizeImage = nImageSize;
// 创建一个与屏幕设备描述表兼容的位图
DWORD nImageSize = sizeof(BITMAPINFOHEADER) + nColSize + (DWORD)(UINT)nLineLen*(DWORD)(UINT)nHeight;
BITMAPFILEHEADER BmpFileHead;
BmpFileHead.bfType = MAKEWORD('B','M');
BmpInfoHead.biHeight = nHeight;
BmpInfoHead.biBitCount = nBitsPixel;
BmpInfoHead.biComபைடு நூலகம்ression = BI_RGB;
BmpInfoHead.biPlanes = 1;
BmpInfoHead.biSizeImage = nImageSize - sizeof(BITMAPINFOHEADER) - nColSize ;
INT nHeight = rcWndRect.bottom;
DWORD nImageSize = nWidth * nHeight * nBitsPixel / 8;
pPicData = new BYTE[nImageSize];
BITMAPINFOHEADER BmpInfoHead;
file.Write(pPicData, nImageSize);
file.Close();
}
delete []pPicData;
}
EndWaitCursor();
}
选修内容2:使用路径层技术绘制复杂的图形
pDC->Rectangle(50, 50, 150, 150);
BITMAPINFOHEADER BmpInfoHead;
memset(&BmpInfoHead, 0, sizeof(BITMAPINFOHEADER));
BmpInfoHead.biSize = sizeof(BITMAPINFOHEADER);
BmpInfoHead.biWidth = nWidth;