一幅小位图旋转45度角以后,四周出现了黑边或白边(按旋转后整个图像所在的矩形来说),现在要把它贴到背景图上,黑边不要,如何实现?
部分代码如下:      //生成掩膜图
      bmpDistortionMask := TBitmap.Create;
      bmpDistortionMask.Assign(bmpDest);
      bmpDistortionMask.Canvas.CopyMode := cmNotSrcCopy;
      bmpDistortionMask.Canvas.CopyRect(BRect,bmpDistortionMask.Canvas,BRect);
      //用掩膜图处理源位图
      imgDistortion.Canvas.CopyMode := cmMergePaint;
      imgDistortion.Canvas.CopyRect(BRect,bmpDistortionMask.Canvas,BRect);
      //把处理过的源位图贴到背景上
      imgCarPhoto.Canvas.CopyMode:=cmSrcPaint;
      imgCarPhoto.Canvas.CopyRect(ARect,imgDistortion.Canvas,BRect);
      //释放资源
      bmpDistortionMask.Free;我实现的是黑边没了,但小图变色了,不是原来的图色。

解决方案 »

  1.   

    用GDI+
    首先用 tgpgraphics类创建一个以背景图的canvas.handle 的对象
    然后再将你的图片旋转直接画到这个 tgpgraphics上即可
      

  2.   

    var  gp : TGpGraphics;
         M : TGpMatrix;
         Center : Tgppoint;
         Image  : TGpBitmap;
         FAngle : integer;//旋转角度
    begin
      try
        Image := TGpBitmap.Craete('a.bmp');
        gp := TGpGraphics.Create(bmp.Canvas.Handle);//bmp为背景图
        M := TGpMatrix.Create;
        Center.X := bmp.Width div 2;
        Center.Y := bmp.Height div 2;
        M.RotateAt(FAngle,Center);
        gp.SetTransform(M);
        gp.DrawImage(Image,Gr);
      finally
        gp.Free;
        Image.Free;
        m.Free;
      end;
    end;
      

  3.   

      var Gr : TGpRect;
    多调试一下嘛,我在代码中Gr都没初始化,你当然得改改
      

  4.   

    我再试一试,看来要学学GDI+了。
      

  5.   

    http://blog.csdn.net/huruihappy/archive/2009/07/07/4329543.aspx
    参考俺的代码
    这段换成你想要的颜色,错误点也就是旋转以后多出的部分,你可以直接把这图形的颜色换成你背景大图相对应位置的颜色,你看过我空间了的,你把中间那块改成双线性插值好了,质量会好很多,现在的那个只是线性插值~
            begin  
              //错误点也设置为白色   
              DestBmp.Canvas.Pixels[j,i] := RGB(255,255,255);   
            end ;   
      

  6.   

    问题解决了,我采用的生成旋转后的区域FRgn,然后再将它贴到大图上。