本人不了解 OpenGL 也不会DelphiX我只求给我段代码,我要求有一函数能实现图片的缩放旋转功能 
同时支持透明的遮罩颜色。要求显示速度快,比如我有个地球的图片,地球圆形的,周围四角是透明的遮罩颜色,
我要实现以圆心为中心的快速转动,同时可能有缩放的动画,遮罩颜色部分不能遮盖下面的图像。十分感谢!
email:[email protected]

解决方案 »

  1.   

    不解......呵 呵听起来像 google earth 的开始
      

  2.   

    是遮罩可设为任何颜色和调节透明度吧,旋转缩放只是下面图片的操作对不?
    你搜一下CSDN原来的贴子,我不止一次贴过旋转缩放之类的代码,至于半透明遮罩,也是有的,好像是一个可调整透明度的 tpanel 控件里有这个代码,具体链接,有空帮你找找
      

  3.   

    遮罩就是透明色。比如用 $FF00FF 表示透明色。因为如果做图像处理的话 在旋转之后 图片明显变模糊了一些,不停的旋转后 图片基本就不能见人了。
    而且运算速度会非常的慢。因为要求速度快 应该只是设置图片显示角度而已。
    不知道该如何实现。忘高手解答。谢谢。
      

  4.   

    看来这里没delphi做做图像方面的高手啊。
      

  5.   


    引用 GDI+ 单元
    函数说明:将一幅图片以 aAngle 的角度旋转画至画布上,x,y,w,d : 目标坐标大小
    procedure DrawAngleBmp(dDC : HDC; aAngle : integer; x,Y,w,d: integer);
      var GD : TGpGraphics ; 
          GpBmp : TGpBitmap;
          aMatrix: TGpMatrix;
          aCenter : tGppointF; 
    begin
      Gd := TGpGraphics.Create(dDc);
      GpBmp := tgpbitmap.Create('文件名');
      aMatrix := TGpMatrix.create;
      aCenter.X := Round(X + GpBmp.Width / 2);
      aCenter.Y := round(Y + GpBmp.height / 2);
      aMatrix.RotateAt(aAngle,aCenter);
      Gd.SetTransForm(aMatrix);
      Gd.DrawImage(GpBmp,GpRect(0,0,W,D),X,Y,GpBmp.Width,GpBmp.Height);
      Gd.Free;
      aMatrix.Free;
      GpBmp.Free;
    end;函数功能 :将目标图和源图以aAlpha 的透明度混合,最终输出图为原输入图
    参数说明  : 1,透明度 2:你的原始图片(地球)最终输出位图 
    procedure DrawAphaBmp(aAlpha : byte; var dBmp : TBitmap );
      var sBmp : TBitmap;  //遮罩图层
           PS,PD : pbytearray
           i , j,K : integer; 
    begin
      sBmp := TBitmap.Create;
      with sBmp do
      begin
        Pixelformat := pf24bit;
        Width := dBmp.Width;
        Height := dBmp.Height;
        Canvas.Brush.Color := $FF00FF ;
        Canvas.Fillrect(Canvas.ClipRect);
      end;  
      for i := 0 to dBmp.Height - 1 do
      begin
        PD := dBmp.Scanline[i];
        PS := sBmp.Scanline[i];
        For j := 0 to dBmp.width - 1 do
        begin
          K := j * 3;
          PD[K] := (PD[K] * (255 - aAlpha) + PS[K] * aAlpha) shr 8;
          PD[K + 1] := (PD[K + 1] * (255 - aAlpha) + PS[K + 1] * aAlpha) shr 8;
          PD[K + 2] := (PD[K + 2] * (255 - aAlpha) + PS[K + 2] * aAlpha) shr 8; 
        end;
      end;
      dBmp.Assign(sBmp);
      sBmp.Free;
    end;
    具体细节,你自己再调整一下吧
        
      

  6.   

    笔误 :
    Gd.DrawImage(GpBmp,GpRect(0,0,W,D),X,Y,GpBmp.Width,GpBmp.Height);
    改为
    Gd.DrawImage(GpBmp,GpRect(x,y,W,D),0,0,GpBmp.Width,GpBmp.Height);
      

  7.   

    mdejtod 你好不知道你的gdi+的文件能不能给我发一份
    我下了一个 不过貌似很多都不一样 你的代码不能编译通过比如 GpBmp.Width,GpBmp.Height 就没有 只有 GpBmp.GetWidth  GpBmp.GetHeight
    谢谢了