例如一张图片中有一个实心黑色的椭圆, 我想把另一张图片嵌套入这个椭圆的黑色区域中,区域外的部分依照,请问这该怎么做,得到答案一定结贴给分。谢谢了。

解决方案 »

  1.   

    zswang:
    好久没看到你了,没想到你还在这边混啊。
      

  2.   

    to ahpei:
      是啊,一直在用Delphi做开发...我的CSDN id是:27337
    你的是:       79014
    搂主的是:    1530372看来我们属于同一个时期的用户 :)
      

  3.   

    谢谢清洁工大哥,效果图在:
    http://terry.imwork.net/csdn/我在这里发了很多次贴,都得到你的回复.其实我这阵子在这个版问的几个问题,最终都为了实现这个效果的。框形我的已经实现了,但就是椭圆不知怎么处理。
      

  4.   

    TO zswang: 呵呵,其实我来CSDN也两年了,我在JAVA版是一星的。不过最近为了做一个window软件,要拾起多年没用的delphi,所以所有分数都用完了,要申请新ID。这个月我多次给分你了。很佩服你的认真跟热心。
      

  5.   

    //参考如下代码
    var
      vBitmap: TBitmap;
      vRect: TRect;
    begin
      //Image1为原图2 Image2为目标图,默认为空
      vBitmap := TBitmap.Create;
      try
        Image2.Picture.Bitmap.Width := Image1.Picture.Graphic.Width;
        Image2.Picture.Bitmap.Height := Image1.Picture.Graphic.Height;
        Image2.Picture.Bitmap.Canvas.Draw(0, 0, Image1.Picture.Graphic);
        vBitmap.Canvas.Brush.Color := clWhite;
        vBitmap.Width := Image1.Picture.Graphic.Width;
        vBitmap.Height := Image1.Picture.Graphic.Height;
        vBitmap.Canvas.Brush.Color := clBlack;
        vRect := Rect(0, 0, vBitmap.Width, vBitmap.Height);
        InflateRect(vRect, -25, -5);
        vBitmap.Canvas.Ellipse(vRect);
        vBitmap.Transparent := True;
        vBitmap.TransparentColor := clBlack;
        Image2.Picture.Bitmap.Canvas.Draw(0, 0, vBitmap);
      finally
        vBitmap.Free;
      end;
    end;
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Src,Des:TJpegImage;
      SrcBmp,DesBmp:TBitmap;
    begin
      Src:=TJpegImage.Create;
      try
        Src.LoadFromFile('E:\a1.Jpg');
        Des:=TJpegImage.Create;
        try
          Des.LoadFromFile('E:\a2.jpg');
          SrcBmp:=TBitmap.Create;
          DesBmp:=TBitmap.Create;
          try
            SrcBmp.Assign(Src);
            DesBmp.Assign(Des);
            BitBlt(DesBmp.Canvas.Handle,0,0,DesBmp.Width,DesBmp.Height,SrcBmp.Canvas.Handle,0,0,SRCPAINT);
            Image1.Picture.Bitmap.Assign(DesBmp);
          finally
            SrcBmp.Free;
            DesBmp.Free;
          end;
        finally
          Des.Free;
        end;
      finally
        Src.Free;
      end;
    end;前提是你遮罩图片(a1)要保留的区域为白,要透过的区域为黑。就像你现在给出的图片的风格一样。
      

  7.   

    上面的各位,还是没有解决一个最大的问题,怎样得到这个椭圆的在所在图片里的上下左右四个坐标,不确定这四点,另一张图片的cavas也不知copy到什么地方,是吧?
      

  8.   

    如果椭圆的边缘颜色是固定的,并且背景不会出现这个颜色
    那就是从上到下扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Top
    那就是从左到右扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Left
    那就是从下到上扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Bottom
    那就是从右到左扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Right