扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:林敏 来源:aspcn 2007年11月14日
关键字:
DxVBLib.DirectDraw7 dDraw=dx. DirectDrawCreate(guid); |
GUID是一个长达128位的结构(Structrue),是接口的代号对每一个借口都是不同的,可以用dx.CreateNewGuid()或者System.Guid.NewGuid().ToString()获得。其实我们在这里并不需要通过这个GUID接口来访问DDraw接口的实体,所以让GUID=""就可以了.
设置DDraw的显示方式;
dDraw. SetCooperativeLevel(this.Handle.ToInt32(), DxVBLib.CONST_DDSCLFLAGS.DDSCL_NORMAL); |
frm就是当前窗体。这里我们先建立一个非独占的DDraw用来在我们的窗体上显示图像。
DxVBLib.CONST_DDSCLFLAGS.下面的对象可以用于DDraw模式的设置。 file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_FULLSCREEN(全屏模式) file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX(允许使用ModeX) file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE(独占模式) |
上面几种是常用的模式。其中后面两种必须与DDSCL_FULLSCREEN一起使用。使用多个参数用以下格式
参数1|参数2|参数3
其它的DirectX的参数用法也是相同的,这些参数也就是一些功能的开关,直接会影响到显示的效果。要了解其他参数最好还是看看在线帮助。
设置DirectDrawSurface7,Surface是DirectDraw用来存放图像信息和显示图像的内存/显存区域,也就是DDraw控制显示图像的实体。它是通过一个DDSURFACEDESC与之对应来设置,该存储区的解释方式,和信息格式等信息。并不是所有的Surface都是可见,有的Surface仅仅是用于存储将要处理的图像信息。因此,显示的内存区域PRIMARYSURFACE和OVERLAY一般都在显存。(OverLay需要硬件支持,一般用作桌面悬浮层,它的显示区域是专门划分的有别于普通的显存)而其它的surface一般都是放在系统内存中,当然你也可以使用DSCAPS_VIDEOMEMORY/ DDSCAPS_SYSTEMMEMORY来指定surface存放的位置。我现在就需要两个surface,一个作为Primary,另一个则是用作存放从硬盘读取来的图片数据。最后,再把数据转换到Primary。
PrimarySurface如此之重要,是不能直接操作的。
DxVBLib.RECT rect,rectSec; DxVBLib.DDSURFACEDESC2 dDDesc=new DxVBLib.DDSURFACEDESC2(); DxVBLib.DirectDrawSurface7 dDsurface; DxVBLib.DDSURFACEDESC2 dDDesc1=new DxVBLib.DDSURFACEDESC2(); DxVBLib.DirectDrawSurface7 dDsurfaceSec; dDDesc.lFlags=DxVBLib.CONST_DDSURFACEDESCFLAGS.DDSD_CAPS; dDDesc.ddsCaps.lCaps=DxVBLib.CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE; dDsurface=dDraw.CreateSurface(ref dDDesc); dDsurfaceSec=dDraw.CreateSurfaceFromFile("c:\\3.bmp",ref dDDesc1); rect.Top=0; rect.Left=0; rect.Right=dDDesc1.lWidth; / /按图片本身大小显示 rect.Bottom= dDDesc1.lHeight; dDsurface.BltFast(0,0,dDsurfaceSec,ref rect,DxVBLib.CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT);//将图象在屏幕上显示 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者