请大家帮助,困扰我两天了,我的背景颜色是白色的,怎么能让背景色变成透明呢。

解决方案 »

  1.   

    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;
      

  2.   

    TransparentBlt