最近学习用DirectDraw来处理图像方面,不过我发现用DirectDraw来显示图像也还是要用到StretchBlt、LoadImage等函数。这些函数是Win32API函数吧?还是GDI函数?GDI函数与Win32API函数有什么关系。GFD函数也是Win32API函数吗?还有AlphaBlend用在DirectDraw中也行。
DirectX也要用到GDI吗?
求解。

解决方案 »

  1.   

    听说DDRAW是与GDI相互独立的吧。而且是直接与驱动打交道,因此速度比GDI快。GDI好像是WIN32函数的子集吧。
      

  2.   

    不过再过些年,等DX11显卡流行的时候,估计DDRAW就没什么存在的理由了吧。
    因为听说DX11的2D处理函数跟GDI一样丰富了。DX11完全可以做2D图形图像处理了。
      

  3.   

    dx 是mssoft推出的处理多媒体的一系列com组件gdi是win32api的子集
    gdi+一定程度上封装了gdigdi的功能就是单一的把图形打印到内存dc上
    dx的作用是处理多媒体,包括图像和视频,dx处理图形后,是可以由gdi函数来把处理后的图形显示到内存dc上的,dc上的图像再通过某种机制传给显卡的内存,最后到显示器;dx也有自己的一套显示图形的机制,并不通过常规内存dc,而是直接打印到显卡的内存上,不过这是个很繁琐的过程,dx通过com组件把这个功能封装起来,供用户使用;有利就有弊,直接打印到显卡是可以节省大量系统资源的,但代价是要和硬件(即显卡)直接打交道,windows编程是不推荐这样做的,这样就产生如下两种情形;
    1.想要自由操作图像就必须在常规的内存上操作,即只能用gdi
    2.想要效率,用dx显示函数,就没自由,一切听人家的,你对图形操作的权限很小因此简单的显示功能(比如显示图片,打汉字,对图形的修改较多),你必须要参与的,可以用gdi
    复杂的显示功能(比如视频播放),你参与的很少,用dx就好多了两套显示机制,你可以根据实际情况自己调整;
      

  4.   

    directX是否可以完全不用win32API函数?
    比如不用LoadImage、StretchBlt等?
      

  5.   

    DirectDraw,Direct3d要用到gdi32.dll
    一是有些功能的确要用到gdi
    二是它们的某些系统调用入口在gdi32.dll中,NtGdiDdCreateDirectDrawObject
      

  6.   

    有一个叫Windows Graphics Programming Win32 Gdi And Directdraw的书籍描述了这些内容