各位大虾,小弟在编写DirectDraw程序时,想对我的一个bmp图像进行一下旋转后在blt上去!但是总是不显示!是什么原因!请各位大虾指点指点!
    我先将bmp图像与一个surface联系起来,然后再blt之前声明一个DDBLTFX变量fx,对这个fx变量初始化,设置一个旋转角度,及旋转属性,然后blt到我的前台页面,可就是不显示?????

解决方案 »

  1.   

    假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x0, y0)绕其中心(xcenter,ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为:
    xcenter = (right - left + 1) / 2 + left;
    ycenter = (bottom - top + 1) / 2 + top;
    x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;
    y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;
      与图像的镜像变换相类似,也采用按行逐点变换的方式实现图像的旋转,其步骤如下:
      (1) 用getimage()把图像保存到内存缓冲区,并擦除原图像。
      (2) 计算图像高度height,宽度width,及保存一行图像信息占用的字节数linebytes,计算公式与镜像变换的计算公式相同。
      (3) 对图像逐行进行旋转变换。
      (4) 释放内存图像缓冲区。
    值得指出的是,这种处理方法不够。为此可以采用另一种方法:先在图像变换缓冲区中处理完毕后,再将变换后的图像一次显示在屏幕上。这样可以取得较好的显示效果。
      

  2.   

    感谢你的回答。你这样做的确没错!问题是我用的是DirectDraw,好像在里面已经有了旋转的方法!而且象你这样做系统的开销也很大!我要每0.2秒旋转一次。所以我想用系统自带的方法处理!