delphi 中如何让图片的背景是透明色的

解决方案 »

  1.   

    用Png图片,可以设置png图片的透明度(不知道这个答案是否是你需要的)
      

  2.   

    如果没alpha就初始化alpha
    然后把alpha设置个透明值
      

  3.   

    先进行异或运算,把背景色变透明并在背景上挖出一个黑轮廓,
    然后再把原图跟背景进行与运算就贴上去啦
    相关原理可以看<学VC编游戏>中的示例代码
    而在Delphi里更容易,只要注意CopyRect两次,第二次的最后一个参数变一下就行了
      

  4.   

    procedure TSubtitleEdit.DrawTransparentBmp(Cnv: TCanvas; x,y: Integer; Bmp: TBitmap;
                                 clTransparent: TColor);
    var
      bmpXOR, bmpAND, bmpINVAND, bmpTarget: TBitmap;
      oldcol: Longint;
    begin
      try
        bmpAND := TBitmap.Create;
        bmpAND.Width := Bmp.Width;
        bmpAND.Height := Bmp.Height;
        bmpAND.Monochrome := True;
        oldcol := SetBkColor(Bmp.Canvas.Handle, ColorToRGB(clTransparent));
        BitBlt(bmpAND.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height, Bmp.Canvas.Handle,
               0,0, SRCCOPY);
        SetBkColor(Bmp.Canvas.Handle, oldcol);    bmpINVAND := TBitmap.Create;
        bmpINVAND.Width := Bmp.Width;
        bmpINVAND.Height := Bmp.Height;
        bmpINVAND.Monochrome := True;
        BitBlt(bmpINVAND.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height,
               bmpAND.Canvas.Handle, 0,0, NOTSRCCOPY);    bmpXOR := TBitmap.Create;
        bmpXOR.Width := Bmp.Width;
        bmpXOR.Height := Bmp.Height;
        BitBlt(bmpXOR.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height, Bmp.Canvas.Handle,
               0,0, SRCCOPY);
        BitBlt(bmpXOR.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height,
               bmpINVAND.Canvas.Handle, 0,0, SRCAND);    bmpTarget := TBitmap.Create;
        bmpTarget.Width := Bmp.Width;
        bmpTarget.Height := Bmp.Height;
        BitBlt(bmpTarget.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height, Cnv.Handle, x,y,
               SRCCOPY);
        BitBlt(bmpTarget.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height,
               bmpAND.Canvas.Handle, 0,0, SRCAND);
        BitBlt(bmpTarget.Canvas.Handle, 0,0,Bmp.Width,Bmp.Height,
               bmpXOR.Canvas.Handle, 0,0, SRCINVERT);
        BitBlt(Cnv.Handle, x,y,Bmp.Width,Bmp.Height, bmpTarget.Canvas.Handle, 0,0,
               SRCCOPY);
      finally
        bmpXOR.Free;
        bmpAND.Free;
        bmpINVAND.Free;
        bmpTarget.Free;
      end;
    end;
    看有用么
      

  5.   

    用 .png格式的图片就行了。。背影是透明的。
      

  6.   

    用.png格式的图片。用DELPHI提供的基础控件就行。用IMAGE控件就OK