请问 TImage Transparent 的实现原理,我想自己做一个出来

解决方案 »

  1.   

    procedure TImage.PictureChanged(Sender: TObject);
    var
      G: TGraphic;
      D : TRect;
    begin
      if AutoSize and (Picture.Width > 0) and (Picture.Height > 0) then
    SetBounds(Left, Top, Picture.Width, Picture.Height);
      G := Picture.Graphic;
      if G <> nil then
      begin
    if not ((G is TMetaFile) or (G is TIcon)) then
      G.Transparent := FTransparent;
            D := DestRect;
    if (not G.Transparent) and (D.Left <= 0) and (D.Top <= 0) and
       (D.Right >= Width) and (D.Bottom >= Height) then
      ControlStyle := ControlStyle + [csOpaque]
    else  // picture might not cover entire clientrect
      ControlStyle := ControlStyle - [csOpaque];
    if DoPaletteChange and FDrawing then Update;
      end
      else ControlStyle := ControlStyle - [csOpaque];
      if not FDrawing then Invalidate;
    end;
      

  2.   

    我自己研究了VCL 代码 解决了很简单  
    就是把TBITMAP 的TRANSPARENT 设为TRUE
    把 TRANSPAENTCOLOR设为需要过滤的颜色就OK了
    还是谢谢楼上的饿